Migrate from GitLab CI
Concept map
Section titled “Concept map”See the comparison for the full table. Key conversions:
| GitLab CI | Slipway |
|---|---|
.gitlab-ci.yml |
.slipway/*.yaml |
stages: + job stage: |
stages: with nested jobs: (or flat jobs: with needs) |
script:, before_script:, after_script: |
A list of steps with run: (use if: always() for after-script) |
image: |
container: { image: ... } |
services: |
services: with health: |
rules: / only / except |
if: and trigger filters (on.push.branches, paths) |
needs: |
needs: |
parallel: matrix: |
matrix: |
cache: with key: and paths: |
cache: with key, restore_keys, paths |
artifacts: |
artifacts: |
variables: |
env: (plain) or secrets (masked) |
environment: name: |
environment: { name: ... } |
when: manual |
An environment approval, or a manual trigger |
retry: |
retry: { max, backoff, when } |
timeout: |
timeout: |
allow_failure: |
allow_failure: |
tags: |
runs_on: labels |
include: / extends: |
template: / extends: |
id_tokens: |
permissions: { id_token: write } |
CI_COMMIT_BRANCH, CI_COMMIT_SHA |
git.branch, git.sha |
Worked conversion
Section titled “Worked conversion”GitLab:
stages: [test, build, deploy]variables: { GOFLAGS: -mod=readonly }
test: stage: test image: golang:1.27 cache: { key: { files: [go.sum] }, paths: [.cache/go] } script: [go test ./...] rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "main"
deploy_prod: stage: deploy environment: { name: production, url: https://api.example.com } script: [./deploy.sh] rules: - if: $CI_COMMIT_BRANCH == "main" when: manualSlipway:
version: 1name: apion: push: { branches: [main] } pull_request:env: { GOFLAGS: -mod=readonly }stages: - name: test jobs: - name: test runs_on: [linux] container: { image: golang:1.27 } cache: - key: go-${{ hashFiles("go.sum") }} paths: [.cache/go] steps: - uses: slipway/checkout@v1 - run: go test ./... - name: deploy needs: [test] jobs: - name: deploy_prod if: git.branch == "main" environment: { name: production, url: "https://api.example.com", service: api } steps: - uses: slipway/checkout@v1 - run: ./deploy.shThe when: manual becomes a protection rule on the production environment (one required approval from the deployer role) rather than a property of the job, so it also applies to promotions and CLI deploys.
- GitLab’s CI/CD variables with
maskedorprotectedmap to Slipway secrets, scoped by environment. Do not export values from the UI: recreate them from your secret manager or use external references. - GitLab merge request pipelines map to
on: pull_request. Slipway posts the status back to the merge request. - Auto DevOps has no equivalent; define pipelines explicitly or use an org base template with
extends:. - Keep the repository on GitLab. Slipway connects via a GitLab integration and does not require moving code.