continuous-integration - Gitlab通过触发器或更改运行作业
问题描述
我试图在这两个条件之一之后触发 CI 中的特定工作
- 由同一管道中的另一个作业触发或
- 更改:somefile.txt
我的 CI 和描述的一样
job1:
stage: build
script:
- echo "JOb1"
- curl -X POST -F token=2342344444 -F "variables[TRIGGER_JOB]=job1" -F ref=master https://main.gitlab.myconmpanyxyz.com/api/v4/projects/1234/trigger/pipeline
only:
changes:
- job1.md
job2: # This does not RUN as expected because of the TRIGGER_JOB set to job1
stage: test
script:
- echo "Job2"
rules:
- if: $TRIGGER_JOB =="job2"
job3: # this RUNS as expected because of VARIABLE TRIGGER_JOB
stage: test
script:
- echo "Job3"
rules:
- if: $TRIGGER_JOB =="job1"
job4: # this also RUNS, but this should not be the expected behavior
stage: test
script:
- echo “job4“
rules:
- if: $TRIGGER_JOB == "xyz"
- changes:
- job4.md
在 job1 完成后,它还需要调用 job4 而不是任何其他作业(在本例中为 job2)。所以我使用 CURL 来调用工作本身。如果有任何更好的方法来调用同一 CI 中的特定工作,也请告诉我。我已经看过这个堆栈溢出页面,但它没有帮助,因为我的工作需要由gitlab-ci 不允许的2 个条件之一触发。
我需要通过 2 个条件之一调用 job4 - 如果TRIGGER_JOB=="job1"或者 job4.md文件中有任何更改。当前,如果在 job4.md 文件中进行了更改,则 job4 运行,但是如果触发了 job1,它也会运行。但是,这不应该是预期的行为。 文档。谁能给我一些线索如何创建这种设计。
解决方案
您的解决方案几乎是正确的,但只有当管道由 a或事件触发时,changes
关键字 with only
or才起作用。这是在变量中定义的。当您通过调用 API 触发管道时,变量包含该值,因此始终返回 true,再次触发并以无限循环结束。您可以添加一个简单的规则来防止:except
push
merge_request
CI_PIPELINE_SOURCE
CI_PIPELINE_SOURCE
trigger
only:changes
job1
except
job1
job1:
stage: build
script:
- echo "JOb1"
- curl -X POST -F token=2342344444 -F "variables[TRIGGER_JOB]=job1" -F ref=master https://main.gitlab.myconmpanyxyz.com/api/v4/projects/1234/trigger/pipeline
only:
changes:
- job1.md
except:
variables:
- $CI_PIPELINE_SOURCE == "trigger"
only/except:changes
您可以在文档中找到更多信息。
推荐阅读
- java - 将 RXJava groupby 与连续项目一起使用
- asp.net - 在 Asp.net Web 表单中等效的 MVC 异常过滤器
- javascript - 如何改进 Node.js 中的赋值代码(ES6 风格)
- excel - 如何同时使用 vlookup 和 If 语句来解决 Excel 中的问题?
- here-api - 在 Here API 中的渡轮上包括车辆公里成本
- plugins - 替代 Toast.Forms.Plugin for Xamarin Forms App
- ios - 如何将 NSValue 转换为 CLLocationCoordinate2D
- calendar - Instagram 浏览器不处理 ICS 链接
- r - 如何使用 R 指定图例的形状以匹配散点图中的组点?
- java - 使用 java 创建 Azure VM