GitHub推送镜像后registry_package事件未触发工作流问题咨询
问题根因确认
是的,这就是第二个工作流无法触发的根本原因。GitHub为了避免出现工作流循环触发的安全风险,默认规定:使用内置secrets.GITHUB_TOKEN执行的所有操作(包括推送代码、创建Release、推送容器镜像等),都不会触发其他工作流的运行规则,所以你用内置令牌推送到GHCR之后产生的registry_package事件,会被系统自动过滤,不会触发你的部署工作流。
无需配置个人访问令牌(PAT)的替代方案
这里有两种常用的无个人令牌方案可选:
方案1:将部署逻辑合并到第一个工作流(最简洁)
直接把部署步骤作为后续Job加在构建推送镜像的工作流中,通过needs参数设置依赖,仅在构建推送成功后执行部署,不需要额外配置任何令牌,也不需要跨工作流触发。
修改后的第一个工作流示例:
name: Build Docker Image on: push: branches: - feature/ver-64/service-template workflow_dispatch: env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build: runs-on: ubuntu-latest steps: # 原有构建推送的所有步骤保持不变 - name: Checkout uses: actions/checkout@v2 - name: Docker meta id: meta uses: docker/metadata-action@v3 with: images: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} type=sha - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to Github Container Repository if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v2 with: context: . push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} # 新增部署Job deploy: needs: build # 仅在build job执行成功后才会运行 runs-on: ubuntu-latest steps: # 这里替换为你实际的部署步骤 - uses: hmarr/debug-action@v2
方案2:通过workflow_run事件触发第二个工作流(保留两个独立工作流)
如果你需要保持两个工作流相互独立,可以把第二个部署工作流的触发规则改为监听第一个工作流的运行完成事件,workflow_run是特殊的触发规则,不受GITHUB_TOKEN的触发限制,不需要额外配置令牌。
修改后的第二个工作流示例:
name: Deploy to Azure on: workflow_run: workflows: ["Build Docker Image"] # 要监听的第一个工作流的名称 types: - completed # 仅在第一个工作流运行完成后触发 jobs: debug: # 增加判断,仅在第一个工作流运行成功时才执行部署 if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: - uses: hmarr/debug-action@v2
内容的提问来源于stack exchange,提问作者cloudlearner
相关产品推荐
相关产品推荐

