我不太确定gitlab CI工作流程应如何实现这一目标:
我想用gitlab CI做什么:
grunt bump
摘要
所以grunt bump
只应在master上和成功测试和合并后执行。仅对于生成的提交(Release vx.x.x),应该完成构建和部署作业...
也许这个想法有一个更聪明的工作流程。基本上我想在合并和成功测试之后修改版本值并标记提交...
我对YAML文件的尝试
stages:
- test
- build
- deploy
lint:
image: testing:latest
stage: test
tags:
- testing
script:
- /node_modules/.bin/eslint --ext .js --ext .jsx .
bump:
stage: build
tags:
- deploy
script:
- grunt bump
only:
- master
- /^Merge .*$/
build:
stage: build
tags:
- deploy
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:latest .
- docker push $CI_REGISTRY_IMAGE:latest
only:
- master
- tags
- /^Release .*$/
production:
stage: deploy
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker pull $CI_REGISTRY_IMAGE:latest
- cd /home/ubuntu
- docker-compose up -d
only:
- master
- tags
- /^Release .*$/
答案 0 :(得分:1)
可以根据预定义的gitlab变量only/except
执行作业$CI_COMMIT_MESSAGE
。
参见gitlab ci reference。
还要检查docu上如何处理变量表达式。
commit_message_has_release_job:
only:
variables:
- $CI_COMMIT_MESSAGE =~ /^Release .*$/
[...]
还可以过滤merge_requests。
merge_request_job:
only:
- merge_requests
[...]
结合多个only/except
情况可能无法正常工作。该列表的工作方式不同于与AND
连接,而是与OR
连接。同样,并非100%肯定前导only
后跟except
会按您的预期工作。因此,一个简单的解决方法将是这样的:
merge_reqeuest_to_master_job:
only:
- merge_requests
before_script:
- if [[ $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != master ]]; exit 0 ; fi
由于仅设置了变量$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
,因此如果管道用于合并请求,则可以执行以下操作:
merge_reqeuest_to_master_job:
only:
variables:
- $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == master
但是功能"CI variable expression conjunction/disjunction"从12.0开始实现。
merge_reqeuest_to_master_job:
only:
- merge_requests
您的其他评论
allow_failure: true
或when: on_failure
)答案 1 :(得分:0)
是的,可以使用特定的提交消息触发管道,为此我们可以使用正则表达式
对我来说,它适用于以下内容,
install_nodemodules:
stage: install
script:
- npm install
artifacts:
paths:
- node_modules/
only:
variables:
- $CI_COMMIT_MESSAGE =~ /^Release .*$/
当你想执行时,你可以给每个阶段这个选项