如何在cloud-init中设置和使用变量?Azure VMSS部署场景求助
解决Azure VMSS cloud-config中获取GitHub令牌并配置Runner的问题
你当前的代码失败核心原因是两次su调用属于独立的Shell进程,第一个进程中定义的REG_TOKEN变量无法被第二个进程读取。以下是几种可行的替代实现方式:
方法1:合并命令到同一个Shell会话
将令牌获取和Runner配置命令合并在同一个su调用内,确保变量在同一环境中生效:
- [su, runner-admin, -c, 'REG_TOKEN=$(curl -sX POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ${var.runner_manage_token}" https://api.github.com/orgs/${var.github_organisation}/actions/runners/registration-token | jq -r .token) && /actions-runner/config.sh --url https://github.com/${var.github_organisation} --token "${REG_TOKEN}" --runnergroup ${var.runner_group}']
关键调整:
- 用
&&连接两个命令,确保令牌获取成功后再执行配置 - 给
REG_TOKEN变量加双引号,避免令牌含特殊字符时出错 jq --raw-output简写为jq -r,简化命令
方法2:先写入脚本再执行
通过cloud-config的write_files模块将逻辑写入独立脚本,再执行脚本,更易调试和维护:
write_files: - path: /home/runner-admin/config-github-runner.sh owner: runner-admin:runner-admin permissions: '0755' content: | #!/bin/bash # 获取GitHub Runner注册令牌 REG_TOKEN=$(curl -sX POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token ${var.runner_manage_token}" \ https://api.github.com/orgs/${var.github_organisation}/actions/runners/registration-token | jq -r .token) # 配置GitHub Runner /actions-runner/config.sh \ --url https://github.com/${var.github_organisation} \ --token "${REG_TOKEN}" \ --runnergroup ${var.runner_group} runcmd: - [su, runner-admin, -c, '/home/runner-admin/config-github-runner.sh']
优势:
- 脚本逻辑独立,可单独测试
- 命令分行书写,可读性更强
- 避免Shell进程隔离导致的变量丢失问题
方法3:使用runuser替代su
runuser更适合非登录Shell的用户切换场景,语法更简洁:
- [runuser, -l, runner-admin, -c, 'REG_TOKEN=$(curl -sX POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ${var.runner_manage_token}" https://api.github.com/orgs/${var.github_organisation}/actions/runners/registration-token | jq -r .token) && /actions-runner/config.sh --url https://github.com/${var.github_organisation} --token "${REG_TOKEN}" --runnergroup ${var.runner_group}']
额外注意事项:
- 确保目标虚拟机已安装
curl和jq工具,可通过cloud-config的packages模块提前安装:packages: - curl - jq - 验证
runner-admin用户对/actions-runner目录有执行权限
内容的提问来源于stack exchange,提问作者batizar
相关产品推荐
相关产品推荐

