You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cloud-init的YAML中用Linux命令触发GitHub Actions工作流构建

问题

我通过Terraform搭配Cloud-init在EC2实例上部署GitHub仓库,GitHub端已配置好可正常运行的Node.js GitHub Actions工作流。每次创建新实例时,需要触发该工作流重新构建,生成后续流程必需的_work文件夹。现在需要在Cloud-init的YAML中,yes "" | sudo apt install nginx命令之后添加实现触发操作的Linux命令。

当前Cloud-init文件内容如下:

#cloud-config
runcmd:
  - apt-get update && apt-get install -y expect
  - mkdir react
  - cd react
  - curl -o actions-runner-linux-x64-2.301.2.tar.gz -L https://github.com/actions/runner/releases/download/v2.300.2/actions-runner-linux-x64-2.301.1.tar.gz
  - tar xzf ./actions-runner-linux-x64-2.300.1.tar.gz
  - yes "" | ./config.sh --url https://github.com/yuuval/react-deploy-aws --token AVYXWHVAXX2TB4J63XBJCIDDYB6TA
  - sudo ./svc.sh install
  - sudo ./svc.sh start
  - yes "" | sudo apt install nginx
  - cd _work
  - cd react-deploy-aws
  - cd react-deploy-aws
  - cd /etc/nginx/sites-available
  - sudo rm default
  - 
    echo "server {listen 80 default_server;server_name _;location / {root
    /home/ubuntu/react/_work/react-deploy-aws/react-deploy-aws/build;try_files
    \$uri /index.html;}}" | sudo tee /etc/nginx/sites-available/default
  - sudo service nginx restart
  - sudo chmod +x /home
  - sudo chmod +x /home/ubuntu
  - sudo chmod +x /home/ubuntu/react
  - sudo chmod +x /home/ubuntu/react/_work
  - sudo chmod +x /home/ubuntu/react/_work/react-deploy-aws
  - sudo chmod +x /home/ubuntu/react/_work/react-deploy-aws/react-deploy-aws
  - sudo chmod +x /home/ubuntu/react/_work/react-deploy-aws/build

解决方案

要触发GitHub Actions工作流,你可以调用GitHub的REST API发送触发请求,在Cloud-init中用curl命令即可实现。

具体操作步骤

  1. 创建GitHub个人访问令牌(PAT):为令牌授予repo权限,用于API请求的身份验证。
  2. 在Cloud-init中插入触发命令:在yes "" | sudo apt install nginx之后添加以下curl命令,替换占位符为你的实际信息:
curl -X POST \
  -H "Authorization: token 你的GitHub_PAT令牌" \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/yuuval/react-deploy-aws/actions/workflows/你的工作流文件名.yml/dispatches \
  -d '{"ref":"main"}'

关键参数说明

  • 你的GitHub_PAT令牌:替换成你生成的拥有repo权限的个人访问令牌。
  • 你的工作流文件名.yml:替换成仓库中实际的工作流配置文件名(例如build.yml或nodejs-ci.yml)。
  • ref字段:指定触发工作流的分支,示例中用main,可根据你的默认分支修改。

修改后的Cloud-init核心片段

runcmd:
  # ... 保留原有命令
  - yes "" | sudo apt install nginx
  # 新增的工作流触发命令
  - curl -X POST -H "Authorization: token 你的GitHub_PAT令牌" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/yuuval/react-deploy-aws/actions/workflows/你的工作流文件名.yml/dispatches -d '{"ref":"main"}'
  # ... 保留原有后续命令

注意事项

  • 确保EC2实例能够访问GitHub的API服务(实例需具备公网访问权限,或通过VPC端点配置内网访问)。
  • 令牌要妥善保管,避免泄露,也可以考虑通过Terraform变量注入令牌,不要硬编码在Cloud-init文件中。

内容的提问来源于stack exchange,提问作者crvxッ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:06:39