我希望构建过程中的一个步骤仅在分支上运行master(如果文件夹发生更改)src。
我的.gitlab-ci.yml文件因此包含:
build:php:
stage: build
image: alpine
interruptible: true
needs: [ "test:php" ]
script:
- do stuff // abreviated for simplicity
rules:
- if: $LANGUAGE_RELEASE
when: never
- if: '$CI_COMMIT_REF_SLUG == "master"' # run for production test branch
- changes:
- src/*
Run Code Online (Sandbox Code Playgroud)
然而,这里的问题是,当dev我更改任何内容时,它也会在分支上运行。
问题:是否有一种方法可以仅运行此步骤,同时满足两个条件(分支和更改)?
当使用rules关键字时,rules:if子句可以与变量一起使用$CI_COMMIT_BRANCH。
因此,如下所示指定master为运行作业的唯一分支:
build:php:
stage: build
# ...
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
# ...
Run Code Online (Sandbox Code Playgroud)
(规则按顺序应用)
可用的常见 if 子句的文档参考位于此处。
现在要结合ifandchanges规则,您需要使用
build:php:
stage: build
# ...
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes:
- file1 # single file
- folder/**/* # folder including all files and subfolders
# ...
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关规则中使用的更改的更多信息,并在此处阅读完整的更改规范。
初始设置存在两个问题:
-前面有一个)src/*仅考虑src文件夹,而不考虑子文件夹,因为您需要src/**/*还可以使用only关键字指定master为运行作业的唯一分支。尽管很简单,但不再鼓励这样做,并且不能与rules( only/ exceptreference ) 一起使用。
例子:
build:php:
stage: build
# ...
only:
- master
# ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8280 次 |
| 最近记录: |