Cod*_*Med 6 github github-actions
GitHub 中的 CI/CD 管道需要首先将代码从dev分支推送到test分支,然后在test代码推送到分支后立即在test分支上运行工作流。
当代码从 GitHub 外部的 devbox推送到分支时,下面dev-environ-workflow的代码确实成功地将代码从分支推送到分支。devtestdev
问题是,test-environ-workflow当代码从 .push 推入test分支时,无法运行dev-environ-workflow。
任何 GitHub 帐户都可以仅使用三个文件和以下结构来重现此问题:
.gihub/workflows/
dev-workflow.yaml
test-workflow.yaml
myapp.py
Run Code Online (Sandbox Code Playgroud)
myapp.py:
.gihub/workflows/
dev-workflow.yaml
test-workflow.yaml
myapp.py
Run Code Online (Sandbox Code Playgroud)
dev-workflow.yaml:
print('Hello from myapp!')
Run Code Online (Sandbox Code Playgroud)
test-workflow.yaml:
name: dev-environ-workflow
on:
push:
branches:
- dev
jobs:
push-to-test-branch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- shell: bash
name: Push changes to test branch
env:
GIT_PAT: ${{ secrets.GIT_PAT }}
run: |
repoWithToken="https://"$GIT_PAT"@github.com/myAccountName/trigger.git"
git config --global user.email "me@mydomain.com"
git config --global user.name "myAccountName"
git init
git remote set-url origin $repoWithToken
git branch -M test
git add --all
git push --force -u origin test
Run Code Online (Sandbox Code Playgroud)
dev-environ-workflow从 GitHub 之外互联网上任何位置的远程开发盒触发的命令是:
name: test-environ-workflow
on:
push:
branches:
- test
jobs:
push-to-test-branch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- shell: bash
name: Do anything
run: echo "Successfully triggered test-environ-workflow"
Run Code Online (Sandbox Code Playgroud)
您还需要为名为 的 GitHub 存储库创建一个环境变量,GIT_PAT其中包含将用于将代码推送到分支的个人访问令牌test。
为了在成功将代码推送到分支test-environ-workflow时成功触发,上面具体需要更改什么?dev-environ-workflowtest
正如您可能从GitHub 文档中了解到的那样:
当您使用存储库
GITHUB_TOKEN执行任务时,由 触发的事件(和GITHUB_TOKEN除外)将不会创建新的工作流运行。这可以防止您意外创建递归工作流运行。workflow_dispatchrepository_dispatch
您正在使用个人访问令牌来解决此问题,但无论如何都将actions/checkout其存储GITHUB_TOKEN在本地存储库配置中,并且在执行 git 操作时将使用它而不是 PAT。
这记录在actions/checkout README 文件中
身份验证令牌保留在本地 git 配置中。这使您的脚本能够运行经过身份验证的 git 命令。该令牌在作业后清理期间被删除。设置 persist-credentials: false 以选择退出。
您需要告诉actions/checkout不要使用 来保留令牌persist-credentials: false。
因此,uses您的开发工作流程中的步骤如下:
steps:
- uses: actions/checkout@v3
with:
persist-credentials: false
- more steps...
Run Code Online (Sandbox Code Playgroud)
@GuiFalourd 在问题评论中提到您可能只需要覆盖GITHUB_TOKEN环境变量。我实际上更喜欢该解决方案,因为这样您就不必在存储库 URL 中传递令牌,这意味着您根本不必覆盖存储库远程。我实际上并没有GITHUB_TOKEN在这里覆盖环境变量,但您可以将 PAT 传递给actions/checkout。
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GIT_PAT }}
- more steps...
Run Code Online (Sandbox Code Playgroud)
这是我的开发工作流程的最小工作版本:
变化:
actions/checkout它已经完成了。git add --all因为您没有更改任何文件。test. 您可以按名称将当前签出的 HEAD 提交推送到任何远程分支。name: dev-environ-workflow
on:
push:
branches:
- dev
jobs:
push-to-test-branch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GIT_PAT }}
- shell: bash
name: Push changes to test branch
run: git push -f origin HEAD:test
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |