{ ".build_config": { "before_script": ["echo test"] }, ".build_script": "echo build script", ".example_variables": { "foo": "hello", "bar": 42 }, ".example_services": [ "docker:dind", { "name": "sql:latest", "command": ["/usr/bin/super-sql", "run"] } ], "default": { "image": "ruby:2.5", "services": ["docker:dind"], "cache": { "paths": ["vendor/"] }, "before_script": ["bundle install --path vendor/"], "after_script": ["rm -rf tmp/"], "tags": ["ruby", "postgres"], "artifacts": { "name": "%CI_COMMIT_REF_NAME%", "expose_as": "artifact 1", "paths": ["path/to/file.txt", "target/*.war"], "when": "on_failure" }, "retry": 2, "timeout": "3 hours 30 minutes", "interruptible": true }, "stages": ["build", "test", "deploy", "random"], "image": "foo:latest", "services": ["sql:latest"], "before_script": ["echo test", "echo test2"], "after_script": [], "cache": { "key": "asd", "paths": ["dist/", ".foo"], "untracked": false, "policy": "pull" }, "variables": { "STAGE": "yep", "PROD": "nope" }, "include": [ "https://gitlab.com/awesome-project/raw/master/.before-script-template.yml", "/templates/.after-script-template.yml", { "template": "Auto-DevOps.gitlab-ci.yml" }, { "project": "my-group/my-project", "ref": "master", "file": "/templates/.gitlab-ci-template.yml" }, { "project": "my-group/my-project", "ref": "master", "file": ["/templates/.gitlab-ci-template.yml", "/templates/another-template-to-include.yml"] } ], "build": { "image": { "name": "node:latest" }, "services": [], "stage": "build", "script": "npm run build", "before_script": ["npm install"], "rules": [ { "if": "moo", "changes": ["Moofile"], "exists": ["main.cow"], "when": "delayed", "start_in": "3 hours" } ], "retry": { "max": 1, "when": "stuck_or_timeout_failure" }, "cache": { "key": "$CI_COMMIT_REF_NAME", "paths": ["node_modules/"], "policy": "pull-push" }, "artifacts": { "paths": ["dist/"], "expose_as": "link_name_in_merge_request", "name": "bundles", "when": "on_success", "expire_in": "1 week", "reports": { "junit": "result.xml", "coverage_report": { "coverage_format": "cobertura", "path": "cobertura-coverage.xml" }, "codequality": "codequality.json", "sast": "sast.json", "dependency_scanning": "scan.json", "container_scanning": "scan2.json", "dast": "dast.json", "license_management": "license.json", "metrics": "metrics.txt" } }, "variables": { "FOO_BAR": "..." }, "only": { "kubernetes": "active", "variables": ["$FOO_BAR == '...'"], "changes": ["/path/to/file", "/another/file"] }, "except": ["master", "tags"], "tags": ["docker"], "allow_failure": true, "when": "manual" }, "error-report": { "when": "on_failure", "script": "report error", "stage": "test" }, "test": { "image": { "name": "node:latest", "entrypoint": [""] }, "stage": "test", "script": "npm test", "parallel": 5, "retry": { "max": 2, "when": [ "runner_system_failure", "stuck_or_timeout_failure", "script_failure", "unknown_failure", "always" ] }, "artifacts": { "reports": { "junit": ["result.xml"], "coverage_report": { "coverage_format": "cobertura", "path": "cobertura-coverage.xml" }, "codequality": ["codequality.json"], "sast": ["sast.json"], "dependency_scanning": ["scan.json"], "container_scanning": ["scan2.json"], "dast": ["dast.json"], "license_management": ["license.json"], "metrics": ["metrics.txt"] } }, "coverage": "/Cycles: \\d+\\.\\d+$/", "dependencies": [] }, "docker": { "script": "docker build -t foo:latest", "when": "delayed", "start_in": "10 min", "timeout": "1h", "retry": 1, "only": { "changes": ["Dockerfile", "docker/scripts/*"] } }, "deploy": { "services": [ { "name": "sql:latest", "entrypoint": [""], "command": ["/usr/bin/super-sql", "run"], "alias": "super-sql" }, "sql:latest", { "name": "sql:latest", "alias": "default-sql" } ], "script": "dostuff", "stage": "deploy", "environment": { "name": "prod", "url": "http://example.com", "on_stop": "stop-deploy" }, "only": ["master"], "release": { "name": "Release $CI_COMMIT_TAG", "description": "Created using the release-cli $EXTRA_DESCRIPTION", "tag_name": "$CI_COMMIT_TAG", "ref": "$CI_COMMIT_TAG", "milestones": ["m1", "m2", "m3"], "released_at": "2020-07-15T08:00:00Z", "assets": { "links": [ { "name": "asset1", "url": "https://example.com/assets/1" }, { "name": "asset2", "url": "https://example.com/assets/2", "filepath": "/pretty/url/1", "link_type": "other" }, { "name": "asset3", "url": "https://example.com/assets/3", "link_type": "runbook" }, { "name": "asset4", "url": "https://example.com/assets/4", "link_type": "package" }, { "name": "asset5", "url": "https://example.com/assets/5", "link_type": "image" } ] } } }, ".performance-tmpl": { "after_script": ["echo after"], "before_script": ["echo before"], "variables": { "SCRIPT_NOT_REQUIRED": "true" } }, "performance-a": { "extends": ".performance-tmpl", "script": "echo test" }, "performance-b": { "extends": ".performance-tmpl" }, "workflow": { "rules": [ { "if": "$CI_COMMIT_REF_NAME =~ /-wip$/", "when": "never" }, { "if": "$CI_COMMIT_TAG", "when": "never" }, { "when": "always" } ] }, "job": { "script": "echo Hello, Rules!", "rules": [ { "if": "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == \"master\"", "when": "manual", "allow_failure": true } ] }, "microservice_a": { "trigger": { "include": "path/to/microservice_a.yml" } }, "microservice_b": { "trigger": { "include": [{ "local": "path/to/microservice_b.yml" }, { "template": "SAST.gitlab-cy.yml" }], "strategy": "depend" } }, "child-pipeline": { "stage": "test", "trigger": { "include": [ { "artifact": "generated-config.yml", "job": "generate-config" } ] } }, "child-pipeline-simple": { "stage": "test", "trigger": { "include": "other/file.yml" } }, "complex": { "stage": "deploy", "trigger": { "project": "my/deployment", "branch": "stable" } }, "parallel-integer": { "stage": "test", "script": ["echo ${CI_NODE_INDEX} ${CI_NODE_TOTAL}"], "parallel": 5 }, "parallel-matrix-simple": { "stage": "test", "script": ["echo ${MY_VARIABLE}"], "parallel": { "matrix": [ { "MY_VARIABLE": 0 }, { "MY_VARIABLE": "sample" }, { "MY_VARIABLE": ["element0", 1, "element2"] } ] } }, "parallel-matrix-gitlab-docs": { "stage": "deploy", "script": ["bin/deploy"], "parallel": { "matrix": [ { "PROVIDER": "aws", "STACK": ["app1", "app2"] }, { "PROVIDER": "ovh", "STACK": ["monitoring", "backup", "app"] }, { "PROVIDER": ["gcp", "vultr"], "STACK": ["data", "processing"] } ] } } }