问个 github workflow 的问题,求大佬帮忙

2023-11-01 19:19:15 +08:00
 MajestySolor

workflow 可以用exit 1来终止,这样将直接跳过后续的所有 job
但是这样一来,这次执行就会被标记为失败
如果我希望达成和exit 1一样的效果,也就是终止 workflow 并跳过后续 job ,但是这次执行被标记为成功,请问该如何处理

说的可能有点抽象,我直接用具体例子吧
比如我的 workflow 想实现如下的功能

job1:
获取本地仓库最新 tag ,写入环境
获取上游仓库最新 tag ,写入环境
比较两个 tag ,如果相同则终止 workflow 并跳过后续 job2 ,如果不同则执行 job2

job2:
do someting

在比较 tags 这一步,我是这样写的

      - name: Compare Tags
        run: |
          echo $LOCAL_LATEST_TAG && echo $UPSTREAM_LATEST_TAG

          if [[ $LOCAL_LATEST_TAG != $UPSTREAM_LATEST_TAG ]]; then
            echo "Tags are not equal. Moving to next job."
            exit 0
          else
            echo "Tags are equal. Skipping next job."
            exit 1
          fi

功能性上没有问题,能达到我想要的效果,但是如果用exit 1结束了,这次 action 就会被标记为失败,那么如果我希望即使 tags 相同终止 workflow 跳过后续也标记为成功,该怎么写呢,求大佬指导

不得不吐槽一下 chatgpt ,指导了我半小时,最终成果还是错误百出🤣

950 次点击
所在节点    GitHub
5 条回复
lisongeee
2023-11-01 19:43:03 +08:00
使用 continue-on-error: true 和 if: ${{ steps.custom_id.outcome == 'success' }}

别人写的一个示例: https://github.com/pionxzh/chatgpt-exporter/blob/54ece73b867f9fd0a220fccc41c6a33d11275448/.github/workflows/build.yml#L43-L59
XiLingHost
2023-11-01 19:52:18 +08:00
https://github.com/orgs/community/discussions/25280
参考这个讨论,建议给后续的操作加条件
goxy
2023-11-01 19:57:45 +08:00
job 一般是 parallel 的吧。可以分成两个 workflow ,用 workflow on 和 if 判断下一个 workflow 是否要执行,https://stackoverflow.com/a/68078768
acdfjelxe
2023-11-01 20:17:46 +08:00
不用 exit code 判断, 可以用比方说 env context

```yaml
- name: compare
run: |
if [ ... ] ; then
echo "GO_NEXT=true" >> "$GITHUB_ENV"
fi

- name: next
if: ${{ env.GO_NEXT == 'true' }}
run: |
....
```
MajestySolor
2023-11-01 21:04:32 +08:00
感谢各位,是我想多了,确实不应该用`exit`
第一个 job 获取 tag ,然而第二个 job 直接用 if 来比较 tag 即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/987610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX