在评论中使用“[skip ci]”从 GitHub 操作自动提交推送也会跳过标签发布时的工作流程触发器

Ari*_*ian 4 github-actions

我已使用此处提到[skip ci]的命令跳过 GitHub 操作中的工作流程运行,在使用 PAT 在 CI aciton 中构建图像后,我正在执行自动提交,效果非常好!

但由于提交注释包含该[skip ci]命令,并且在此之后如果我创建新的标签版本,则不会触发 CI 工作流程,因为[skip ci].

有什么方法可以排除[skip ci]for 标签推送事件并仅将其保留在运行 ci 操作的分支之一吗?

GitHub 操作中的自动提交:

on: push
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - name: build and push image 
      - name: update image tag
        
      - name: Commit changes
        run: |
          git config --global user.name 'abc'
          git config --global user.email 'xyz@users.noreply.github.com'
          git remote add origin https://github.com/${{ github.repository }}
          git config --global push.default current
          git remote set-url origin https://${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/${{ github.repository }}
          git commit -am "build: Image tag udpated [skip ci]"
          git push
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,此操作将对所有推送事件运行,并且该Commit changes步骤将使用 PAT 进行另一次提交,但在[skip ci]注释中,因此不会再次触发相同的工作流程并且它可以工作。

但是,当我去发布具有新发布标题和描述的新标签时,不会触发此操作。

在此输入图像描述

有办法避免这种情况吗?

jes*_*ing 8

GitHub 操作使用一种特殊的安全令牌,将自身标识为 GitHub 操作。它利用这一事实来防止操作触发更多操作,从而可能导致级联。

要绕过此保护,您需要使用不同的安全令牌(例如个人访问令牌或 OAuth 应用程序令牌)来执行标签推送操作。

您可以将该令牌存储为操作机密。

当您使用存储库的 GITHUB_TOKEN 执行任务时,GITHUB_TOKEN 触发的事件不会创建新的工作流运行。这可以防止您意外创建递归工作流运行。例如,如果工作流运行使用存储库的 GITHUB_TOKEN 推送代码,则即使存储库包含配置为在推送事件发生时运行的工作流,新工作流也不会运行。

https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow

能做的就是尽早摆脱困境。为此,请[skip ci]从提交消息中删除令牌并添加您自己的令牌,例如[do-not-build],任何东西都可以,真的。

然后if:在执行构建的作业上添加一个条件:

if: ${{ contains(github.event.commits[0].message, '[do-not-build]') }}
Run Code Online (Sandbox Code Playgroud)

它将触发工作流程,但立即跳过作业。