---
title: Using Turborepo with GitLab CI
description: How to use GitLab CI with Turborepo to optimize your CI workflow
---

import { Tabs, Tab } from '../../../components/Tabs'

# Using Turborepo with GitLab CI

The following example shows how to use Turborepo with [GitLab CI](https://docs.gitlab.com/ee/ci/).

For a given root `package.json`:

```json
{
  "name": "my-turborepo",
  "scripts": {
    "build": "turbo run build",
    "test": "turbo run test"
  },
  "devDependencies": {
    "turbo": "1.2.5"
  }
}
```

And a `turbo.json`:

```json
{
  "$schema": "https://turborepo.org/schema.json",
  "baseBranch": "origin/main",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": []
    },
    "test": {
      "dependsOn": ["^build"],
      "outputs": []
    },
  }
}
```

Create a file called `.gitlab-ci.yml` in your repository with the following contents:

<Tabs items={['npm', 'yarn', 'pnpm']} storageKey="selected-pkg-manager">
    <Tab>
        ```yaml
        image: node:latest
        # To use Remote Caching, uncomment the next lines and follow the steps below.
        # variables:
        #   TURBO_TOKEN: $TURBO_TOKEN
        #   TURBO_TEAM: $TURBO_TEAM
        stages:
          - build
        build:
          stage: build
          script:
            - npm install
            - npm run build
            - npm run test
        ```
    </Tab>
    <Tab>
        ```yaml
        image: node:latest
        # To use Remote Caching, uncomment the next lines and follow the steps below.
        # variables:
        #   TURBO_TOKEN: $TURBO_TOKEN
        #   TURBO_TEAM: $TURBO_TEAM
        stages:
          - build
        build:
          stage: build
          script:
            - yarn install
            - yarn build
            - yarn test
          cache:
            paths:
              - node_modules/
              - .yarn
        ```
    </Tab>
    <Tab>
        ```yaml
        image: node:latest
        # To use Remote Caching, uncomment the next lines and follow the steps below.
        # variables:
        #   TURBO_TOKEN: $TURBO_TOKEN
        #   TURBO_TEAM: $TURBO_TEAM
        stages:
          - build
        build:
          stage: build
          before_script:
            - curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@6.32.2
            - pnpm config set store-dir .pnpm-store
          script:
            - pnpm install
            - pnpm build
            - pnpm test
          cache:
            key: "$CI_COMMIT_REF_SLUG"
            paths:
              - .pnpm-store
        ```
        > For more information visit the pnpm documenation section on GitLab CI integration, view it [here](https://pnpm.io/continuous-integration#gitlab)
    </Tab>
</Tabs>

## Remote Caching

To use Remote Caching with GitLab CI, add the following environment variables to your GitLab CI project.

- `TURBO_TOKEN` - The Bearer token to access the Remote Cache
- `TURBO_TEAM` - The account to which the monorepo belongs

To use Vercel Remote Caching, you can get the value of these variables in a few steps:

1. Create a Scoped Access Token to your account in the [Vercel Dashboard](https://vercel.com/account/tokens)

![Vercel Access Tokens](/images/docs/vercel-tokens.png)
![Vercel Access Tokens](/images/docs/vercel-create-token.png)

Copy the value to a safe place. You'll need it in a moment.

2. Go to your GitLab repository settings and click on the **Settings** and then **CI/CD** tab. Create a new variable called `TURBO_TOKEN` and enter the value of your Scoped Access Token.

![GitLab CI Variables](/images/docs/gitlab-ci-variables.png)
![GitLab CI Create Variable](/images/docs/gitlab-ci-create-variable.png)

3. Make a second secret called `TURBO_TEAM` and enter the value of your team's Vercel URL _without_ the `vercel.com/`. Your Team URL can be found inside your team's general project settings from the dashboard.

   If you're using a Hobby Plan, you can use your username. Your username can be found in your [Vercel Personal Account Settings](https://vercel.com/account)

![Vercel Account Slug](/images/docs/vercel-slug.png)
