在另一个工作流成功运行后手动触发 Github 个 Actions 工作流

Manually trigger Github Actions workflow after another workflow successfully runs

我正在尝试创建执行以下操作的 CI:

  1. 运行 terraform plan -out=plan.out 生成 Terraform 计划。
  2. 查看 Github 操作中的 Terraform 计划输出后,我可以 手动 运行 调用 terraform apply plan.out 的另一个作业或工作流先前生成的计划。我想在其他自动化成功 运行 之后手动 运行 此自动化,这取决于先前自动化的成功,使用来自先前自动化的工件。

我在网上查找了一些这方面的示例,但我只能找到所有示例 运行 terraform apply,而实际上并没有允许某人验证计划输出。

这是否可以在 Github 操作中完成?

这可以使用受保护环境所需的审阅者来完成:https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#required-reviewers

你要做的是设置一个环境,例如production 并将自己添加为审阅者。

在您的工作流程中,您可以像这样添加环境:

jobs:
  plan:
    steps:
      - run: terraform plan
  apply:
    environment: production
    steps:
      - run: terraform apply

这意味着一旦工作流到达作业 apply,它就会停止,您需要手动单击按钮进行批准。

我的解决方案如下:

当 PR 获得批准并合并时,将创建一个 Terraform 计划并将其推送到路径中包含提交哈希的 S3 存储桶。然后,当应用工作流通过工作流分派被触发时,它会为它正在 运行ning 的代码的提交散列寻找一个计划并应用它。

按照建议使用拉取请求对我来说不是正确的解决方案,原因如下:

  1. 您怎么知道 运行 的拉取请求计划是 运行 并在基础分支上进行了最新更改?在这种情况下,该计划可能无效。我解决这个问题的方法是让计划工作流 运行 推送与 Terraformed 环境相对应的特定分支。这样,计划始终针对 Terraform 所说的特定环境应该处于的状态生成。

  2. 您怎么知道申请正在应用为拉取请求生成的确切计划?我看到的所有示例实际上最终都在应用工作流中重新 运行 计划,这打破了 Terraform 计划的预期用途。我解决这个问题的方法是让应用工作流在云存储中查找特定的提交哈希。