如何在计划的 github 操作中重用来自同一存储库的工作流程并在特定分支的上下文中运行它?

问题描述 投票:0回答:1

在私人 github-repo 上,我想在

nightly-qa.yml
中创建一个预定作业,该作业每晚 2 点运行,并且应该将我的应用程序部署到 qa 系统(来自
develop
分支!)。我已经有一个 cd.yml 流程,我想重用它。由于计划作业默认在默认分支(主分支)上运行,因此调用的工作流
cd.yml
use
也在主分支上运行。但我想把分支里面的
cd.yml
称为
develop
。我还从here阅读了解决方案,但这迫使我将所有结账操作移至
nightly-qa.yml
。我还尝试了
<OWNER>/<REPO>/.github/workflows/cd.yml@develop
语法,但这仅使用开发分支中的工作流程.yml 版本,但不在
develop
分支的上下文中运行。

name: Nightly deployment of qa system
on:
  workflow_dispatch:
  schedule:
    - cron: '* 2 * * *'

jobs:

  deployment:
    permissions:
      contents: write
    name: Run CD Workflow
    secrets: inherit
    uses: <OWNER>/<REPO>/.github/workflows/cd.yml@develop
    with:
      config: qa
      version-bump-level: prerelease

我还尝试了以下Github Action,我可以在其中指定 ref 属性。

- name: Invoke workflow without inputs
  uses: benc-uk/workflow-dispatch@v1
  with:
    workflow: cd.yml
    ref: develop

但是我得到了:

运行 benc-uk/workflow-dispatch@v1 /usr/bin/docker exec f7414c05443aa832a2b1ba0fd457593361b7ec6354f68d861746723554fab609 sh -c "cat /etc/*release | grep ^ID" 🏃 工作流程调度操作 v1.2.1 错误:集成无法访问资源

我还尝试在管道内调用Github API,但出现了相同的错误:

name: scheduled nightly build for qa
on:
  schedule:
    - cron: '* 2 * * *'
  workflow_dispatch:

jobs:
  deploy:
    runs-on: self-hosted 
    name: deploy on qa and call the cd flow on development branch

    container: 
      image: alpine:3.19

    steps:
      - uses: actions/checkout@v4
      - name: Install curl
        run: apk update && apk add --no-cache curl
      - name: list available workflows
        env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 
        run: | 
          curl -L \
            -H "Accept: application/vnd.github+json" \
            -H "Authorization: Bearer $GITHUB_TOKEN" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
            https://api.github.com/repos/<ORG>/<REPO>/actions/workflows
      - name: Call cd
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 
        run: |
          curl -L \
            -X POST \
            -H "Accept: application/vnd.github+json" \
            -H "Authorization: Bearer $GITHUB_TOKEN" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
        https://api.github.com/repos/<ORG>/<REPO>/actions/workflows/cd.yml/dispatches \
            -d '{"ref":"develop"}'

我遇到了同样的错误。令牌中似乎缺少权限。我检查了权限并配置了这个:

目前调用工作流程并指定分支引用(应该在哪里执行)的好方法是什么?最后,我只想从

develop
分支的状态创建夜间构建。

非常感谢您的帮助!

github github-actions continuous-deployment
1个回答
0
投票

哇哦。你已经陷入了一个兔子洞。

您的方法似乎是尝试找到一种调用工作流文件的方法,因为它存在于另一个分支中,假设如果您还没有设置它以便您无论如何都在该分支中,则工作流将由于某种原因,无论如何都要在您从中检索到它的分支上工作。不会是这样吧。

在不同分支的工作流程之间进行选择。

如果

cd.yml
main
中的
develop
工作流程文件之间存在重大差异,那么您将需要
uses: <OWNER>/<REPO>/.github/workflows/cd.yml@develop
来使用开发分支中的工作流程版本,但这仍将在
main
分支的上下文。否则,只需使用
uses: ./.github/workflows/cd.yml
来使用
main
中的即可。

在另一个分支的上下文中运行工作流。

您希望您的

cd.yml
接受
workflow_call
事件。请参阅这个。您可以设置输入,并通过
with:
上的
<job_id>.uses:
块提供值。在这种情况下,您需要设置一个输入来提供要在上下文中操作的分支的名称,并在
cd.yml
内使用该输入作为
checkout
操作的
with.ref:
的参数。工作流的运行仍将在
main
分支的上下文中运行,但您执行的
git
操作将针对签出的
develop
分支进行操作。

workflow_call
vs
workflow_dispatch

如果您还出于其他原因使用调度事件,则可以保留这两个事件。两者都将在您的工作流程中提供

inputs.
上下文,因此只需在两者中类似命名的输入中使用相同的参数名称和相同的默认值,就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.