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

如何在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}']

额外注意事项:

  1. 确保目标虚拟机已安装curl和jq工具,可通过cloud-config的packages模块提前安装:
    packages:
    - curl
    - jq
    
  2. 验证runner-admin用户对/actions-runner目录有执行权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:15:44