gpt4 book ai didi

Gitlab CI管道-仅在特定条件下才能继续进行下一阶段

转载 作者:行者123 更新时间:2023-12-01 01:42:48 25 4
gpt4 key购买 nike

我正在尝试建立一个由4个工作组成的Gitlab管道。我所经历的阶段是:

stages:
- compare
- build
- test
- deploy

比较阶段是从另一台服务器上的API进行转储,将其与上一次成功的管道运行(作为工件可用)进行的同一转储进行比较,然后将两者进行比较。
如果有任何差异,我希望管道进入下一个阶段,如果没有差异,那么我希望它优雅地退出。

我让它正常工作,但是如果没有任何区别,它不会正常退出,并且失败并且管道被标记为失败,这是它的外观。

enter image description here

这是我的.gitlab-ci.yaml中的重要代码(已删除一些标识信息)
Get_inventory_dump:
stage: compare
only:
- schedules
script:
- 'curl -k --output "previous-inventory.json" --header "PRIVATE-TOKEN: $user_token" "https://url/to/get/artifact/from/last/successful/run"'
- python3 auto_config_scripts/dump_device_inventory_api_to_json.py -p $pass -o /inventory.json -u https://url/for/inventory/dump -y
- /usr/bin/cmp previous-inventory.json inventory.json && echo "No Change in inventory since last successful run" && exit 1 || echo "Inventory has changed since last run, continue" && exit 0
artifacts:
when: on_success
expire_in: 4 weeks
paths:
- inventory.json

Generate_icinga_config:
stage: build
only:
- schedules
when: on_success
script:

一切都按我的预期进行,但是我觉得有更好的方法可以做到这一点。

如果比较是相同的,是否有办法简单地跳过管道的下一个阶段,但仍以“通过”而不是“失败”的方式完成管道?

最佳答案

我可以想到两种解决方案。不幸的是,它们要么使UI行为有些困惑,要么必须调整所有作业。

诸如onlychanges之类的作业属性仅与git存储库的状态或文件有关(请参阅https://docs.gitlab.com/ee/ci/yaml/),因此在这里不再使用,因为该文件仅在CI期间创建,而不是存储库的一部分。

解决方案1:您可以allow_failure: true到第一份工作。尽管作业失败,这仍将管道标记为成功,并且由于第一个作业未成功,后续作业将不会执行。缺点是,当您调查管道时,此作业将带有感叹号而不是绿色的复选标记。

解决方案2:无需更改就不会使第一个作业失败,而是删除了inventory.json文件。当文件不存在时,所有后续作业将直接以退出代码0终止。请注意,这仅适用于inventory.json被标记为工件的情况。

关于Gitlab CI管道-仅在特定条件下才能继续进行下一阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54706792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com