流水线文件
前提条件,注册一个 gitlab runner,并且该 runner 内部可以访问 giltab 服务进行下载代码。gitlab-runner 的 config.toml 参考如下:
concurrent = 1check_interval = 0shutdown_timeout = 0
[session_server] session_timeout = 1800
[[runners]] name = "runner" url = "http://192.168.1.107:8000/" token = "glrt-6ByqoP5bmYyz4FyYwozc" executor = "docker" [runners.custom_build_dir] [runners.cache] MaxUploadedArchiveSize = 0 [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "docker:stable" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/etc/docker/daemon.json://etc/docker/daemon.json:ro","/var/run/docker.sock://var/run/docker.sock","/.m2", "/cache"] shm_size = 0 network_mtu = 0 extra_hosts = ["gitlab.example.com:192.168.1.107"] network_mode = "host"在gitlab仓库中项目根目录添加一个 .gitlab-ci.yml 文件,文件内容如下:
stages: - build - deploy
build: stage: build script: - echo "start build"
deploy: stage: deploy script: - echo "start deploy"这个流水线共包含两个job,分别是build 和 deploy。
- build 包含一个stage build,运行构建命令。
- deploy 包含一个stage deploy,运行部署命令。
提交文件后,会自动触发cicd流程,查看流水线信息,已成功完成操作。
默认情况下使用项目根目录下的 .gitlab-ci.yml 文件,当然我们也可以本仓库其他路径下的文件或者远程仓库文件路径。
Pipeline 基础语法
default 全局配置
在GitLab CI/CD的流水线中存在几个全局关键词,设置后,这些配置对于整条流水线生效,如stages,include,workflow,default,variables。
在default中你可以将一些关键词配置成全局配置。配置后这些配置项将对每个作业生效,作为初始值,开发者也可以在作业中重新定义覆盖他们。
default: image: #定义所有 jobs 的默认 Docker 镜像。 services: #定义所有 jobs 的默认服务。 before_script: #定义在所有 jobs 之前运行的脚本。 after_script: #定义在所有 jobs 之后运行的脚本。 tags: #定义所有 jobs 的默认标签。 cache: #定义所有 jobs 的默认缓存策略。 artifacts: #定义所有 jobs 的默认构件策略。 retry: #定义所有 jobs 的默认重试策略。 timeout: #定义所有 jobs 的默认超时时间。 interruptible: #定义所有 jobs 是否可以被中断。job
在 .gitlab-ci.yml 的YAML文件中可以定义多个作业,每个作业运行不同的命令,命令可以是shell或脚本。
job1: script: "execute-script-for-job1"
job2: script: "execute-script-for-job2"说明:
- 可以定义一个或多个作业。
- 每个作业必须具有唯一的名称,作业名称不能使用关键字。
- 每个作业是独立执行的。
- 每个作业至少要包含一个script。
script
job: script: - uname -a - bundle exec rspec注意:
- 有时, script命令将需要用单引号或双引号引起来.。例如,包含冒号命令( : )需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个”键:值”对.。
- 使用特殊字符时要小心:
:、{、}、[、]、,、&、*、#、?、|、-、<、>、= !、%、@
before_script
前置脚本,用于定义一个命令,该命令在每个作业之前运行。必须是一个数组。指定的script与主脚本中指定的任何脚本串联在一起,并在单个shell中一起执行。
after_script
后置脚本,用于定义将在每个作业(包括失败的作业)之后运行的命令。这必须是一个数组。指定的脚本在新的shell中执行,与任何before_script 或 script 脚本分开。 after_script 可以在全局定义,也可以在 job 中定义。在job中定义会覆盖全局。
default: before_script: - echo "before-script!!" after_script: - echo "after-script"
variables: DOMAIN: example.com
stages: - build - deploy
build: before_script: - echo "before-script in job" stage: build script: - echo "mvn clean " - echo "mvn install" after_script: - echo "after script in job"
deploy: stage: deploy script: - echo "hello deploy"说明:
- after_script 失败不会影响作业失败。
- before_scrip t失败导致整个作业失败,其他作业将不再执行。
- 作业失败不会影响 after_script 运行。
stages
用于定义作业可以使用的阶段,并且是全局定义的。同一阶段的作业并行运行,不同阶段按顺序执行。
stages: - build - test - deploy这里定义了三个阶段,首先 build 阶段并行运行,然后 test 阶段并行运行,最后deploy阶段并行运行。deploy阶段运行成功后将提交状态标记为 passed 状态。如果任何一个阶段运行失败,最后提交状态为 failed。