在私人 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
分支的状态创建夜间构建。
非常感谢您的帮助!
哇哦。你已经陷入了一个兔子洞。
您的方法似乎是尝试找到一种调用工作流文件的方法,因为它存在于另一个分支中,假设如果您还没有设置它以便您无论如何都在该分支中,则工作流将由于某种原因,无论如何都要在您从中检索到它的分支上工作。不会是这样吧。
如果
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.
上下文,因此只需在两者中类似命名的输入中使用相同的参数名称和相同的默认值,就可以了。