如何在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命令即可实现。
具体操作步骤
- 创建GitHub个人访问令牌(PAT):为令牌授予
repo权限,用于API请求的身份验证。 - 在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ッ
相关产品推荐
相关产品推荐

