我正在尝试构建一个可以有条件执行的作业,具体取决于是否使用WebClient
在develop
分支中修改了rules
中的文件或子目录。如果仅在developer分支中找到更改,则将构建管道。
目前我在.gitlab-ci.yml
中得到的是
deploy_dev_client:
stage: client
tags:
- my tags
script:
- '& cd WebClient'
- 'npm rebuild node-sass'
- 'npm install @angular/cli@7.0.3'
- '& npm run build-release --max_old_space_size=$NODE_MEMORY_SIZE'
rules:
- changes:
- WebClient/**/*
when: always
- when: never
但是,在测试之后,我意识到只要将本地仓库中的内容推送到gitlab,甚至在其他分支,都将执行管道。
我尝试使用only:-develop'
,但是如果由于yaml invalid
已经被使用而导致无法使用only
的情况,则会导致rules
错误。无论如何,我仍然可以使用rules
来仅定位develop
分支吗?
答案 0 :(得分:2)
在此链接中:
https://docs.gitlab.com/ee/ci/yaml/#ruleschanges
他们写道rules: changes
应该和only/except
一样工作。如果您读到有关only/except
的内容,则可能会遇到一些奇怪的事情:
https://docs.gitlab.com/ee/ci/yaml/#using-onlychanges-without-pipelines-for-merge-requests
将新分支或新标签推送到GitLab时,策略始终评估为true。
要解决此问题并仅在开发分支上运行您的工作,您应该可以将if
与changes
结合起来:
deploy_dev_client:
stage: client
tags:
- my tags
script:
- '& cd WebClient'
- 'npm rebuild node-sass'
- 'npm install @angular/cli@7.0.3'
- '& npm run build-release --max_old_space_size=$NODE_MEMORY_SIZE'
rules:
- if: '$CI_COMMIT_REF_NAME== "development"'
changes:
- WebClient/**/*
when: always
(我尚未测试此代码,所以让我知道它是否全部错了!)