在实际的生产环境中可能存在多个分支,经常遇到分支中的代码需要测试不同的功能或者需要部署到不同的环境的场景。则需要再pipeline中定义在不同的分支上面做不同的事。
可以借助 gitlab-ci 的关键字 rules:if 来实现,如:
假设目前的代码有2个分支,dev分支基于m1,如下:
main: m1->m2->m3
develop: m1->d1->d2
当提交一个commit d3到dev分支后会触发一次pipeline
如果希望在runner上测试的代码基于main分支最新的,而其他分支代码需要分开测试 再合并到main分支 m3->d1->d2->d3,则需要再ci.yaml中定义分别执行。
ci示例:
# List of stages for jobs, and their order of execution
stages:
- build
- test
- deploy
job1:
stage: build
# when: manual #开启之后任务需手动触发
allow_failure: true #是否允许失败ture/false,设置为允许时,失败后不影响后续任务
script:
- docker build
- docker tag images
- docker push
rules:
- if: $CI_COMMIT_TAG && $CI_COMMIT_BRANCH == "master" #当代码提交到master时,打tags触发任务
# - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" #当有合并请求到master时,打tags触发任务
job2:
stage: deploy
# when: manual #开启之后任务需手动触发
script:
- docker build
- docker tag images
- docker push
- ssh x.x.x.x -C "docker pull && docker restart"
rules:
- if: $CI_COMMIT_BRANCH == "uat" #提交分支为uat或fat时触发任务
- if: $CI_COMMIT_BRANCH == "fat"
job3:
stage: deploy
# when: manual #开启之后任务需手动触发
script:
- echo "Hello world"
rules:
- if: $CI_COMMIT_BRANCH == "dev" #提交分支为dev时触发任务
另外: