Việ*_*yễn 6 pipeline gitlab gitlab-ci gitlab-ci-runner
我正在尝试构建一个可以有条件地执行的作业,这取决于是否WebClient在develop分支中修改了文件或子目录,使用rules. 如果仅在开发分支中发现更改,则将构建管道。
目前我得到的.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
Run Code Online (Sandbox Code Playgroud)
但是,经过测试,我意识到每当我从本地存储库向 gitlab 推送某些内容时都会执行管道,即使在另一侧的分支上也是如此。
我试过使用only:-develop',但它导致yaml invalid错误,可能是因为only如果rules已经使用则无法使用。无论如何,我仍然可以使用rules仅针对develop分支吗?
在这个链接中:
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
Run Code Online (Sandbox Code Playgroud)
(我还没有测试过这段代码,所以如果有错,请告诉我!)
| 归档时间: |
|
| 查看次数: |
6810 次 |
| 最近记录: |