在每个 CI 解决方案(Jenkins、CircleCI、GitlabCI)中,都可以暂停流水线并等待手动批准后继续执行。
如何在 GitHub Actions 中实现这一功能?
如何在 GitHub Actions 中实现这一功能?
environment:
name: <Your Github Environment here>
我目前的工作需要使用GitHub Actions,不得不说我对于它们是如何在微软的支持下发展壮大感到惊讶。
无论如何,仍然没有专门的功能来执行非常简单且必需的任务。不过我有一种不错而且不太麻烦的解决方法。
如果您没有使用环境变量,请定义一个环境变量,并将其命名为“manual_approval”或类似名称,并分配所需的批准者(可以是组)。这样就能解决问题了。
如果您已经在使用环境变量(您应该这么做),请为每个环境定义2个条目(例如“prod”和“prod-manual”)。然后以相同的方式配置它们,只需在手动条目中添加所需的批准者即可。
现在,您只需像以下示例中那样在流水线中添加此环境即可:
name: manual approval demo
on:
push:
jobs:
tf_plan:
name: Terraform Plan
runs-on: terraform
environment: Prod
steps:
...
tf_apply:
name: Terraform Apply
runs-on: terraform
environment: Prod-manual
steps:
...
为了满足工作流程,每个现实生活环境需要定义两个环境。每个job只能引用单个环境。
这不是完美的解决方案,但这是我能想到的最少丑陋的解决方案。与其他工具相比,GitHub Actions 的成熟度确实还有很大提升空间。
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
ManualApprove:
needs: TerraformShow
environment:
name: approvers
runs-on: ubuntu-latest
steps:
- name: manual approve
run: |
echo "Manually approved"
这将为您提供一个按钮,您可以点击它,就像您从GitLab等应用程序中所熟悉的那样...目前没有手动触发器,但是Github提供了on_dispatch事件,您可以针对该事件来启动重新运行。您可以通过curl或从Postman内部执行此操作。我已经用Postman编写了一个解决方案,并在此处包含了屏幕截图: https://medium.com/@christinavhastenrath/how-to-run-github-actions-manually-afebbe77d325
Github还刚刚发布了他们的GitHub Actions API,可用于构建触发器。您可以在这里找到API文档:https://developer.github.com/v3/actions/
GitHub官方的回应是他们正在考虑无条件重新运行操作,但目前还没有确认。您可以在Github社区中跟进任何更新:https://github.community/t5/How-to-use-Git-and-GitHub/Is-it-possible-to-manually-force-an-action-workflow-to-be-re-run/td-p/25336。