如何配置GitLab Pipeline仅在非master分支执行指定操作
GitLab CI 分支差异化执行脚本解决方案
方案一:使用rules拆分作业(推荐,符合GitLab CI最佳实践)
通过extends关键字复用公共逻辑,避免重复代码,不同分支自动匹配对应作业执行:
# 公共镜像构建推送模板,无需单独执行 .docker-build-push: script: - docker build -t $DOCKER_REGISTRY/$APP_NAME:$CI_COMMIT_SHA . - docker push $DOCKER_REGISTRY/$APP_NAME:$CI_COMMIT_SHA # master分支专属作业 build-master: extends: .docker-build-push rules: - if: $CI_COMMIT_BRANCH == "master" # 非master分支专属作业 build-non-master: extends: .docker-build-push script: # 继承模板脚本后新增Lambda更新逻辑 - aws lambda update-function-code --region $AWS_DEFAULT_REGION --function-name function1 --image-uri $DOCKER_REGISTRY/function1:$CI_COMMIT_SHA rules: - if: $CI_COMMIT_BRANCH != "master"
说明:此方案不同分支的执行日志独立拆分,便于后续问题排查,是GitLab官方推荐的分支差异化配置方式
方案二:单作业内加Shell条件判断
如果希望所有逻辑合并在同一个作业内,可直接通过GitLab预置的环境变量在脚本中做分支判断:
build-deploy: script: - docker build -t $DOCKER_REGISTRY/$APP_NAME:$CI_COMMIT_SHA . - docker push $DOCKER_REGISTRY/$APP_NAME:$CI_COMMIT_SHA # 仅非master分支执行Lambda更新 - | if [ "$CI_COMMIT_BRANCH" != "master" ]; then aws lambda update-function-code --region $AWS_DEFAULT_REGION --function-name function1 --image-uri $DOCKER_REGISTRY/function1:$CI_COMMIT_SHA fi
说明:此方案配置更精简,适合分支逻辑差异较小的场景
内容的提问来源于stack exchange,提问作者Andrew Harris
相关产品推荐
相关产品推荐

