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

Azure Pipeline运行Terraform时GCP VM的metadata_startup_script未执行

问题:Terraform创建GCP实例时启动脚本在Azure Pipeline中未执行

问题详情

本地运行Terraform代码完全正常,但通过Azure Pipeline执行时,google_compute_instance创建GCP虚拟机的其他操作(如上传公钥元数据)均正常,唯独metadata_startup_script未执行。Terraform Plan能识别脚本内容(含变量和值)并提示将应用,但Apply阶段实际跳过执行。

尝试过以下多种写法,均在Azure Pipeline中无效(本地运行正常):

data "template_file" "admin" {
  template = file("initial-setup.sh")
  vars = {
    password = "${random_password.admin_password.result}"
    prefix = "${var.prefix}"
  }
}

# 在google_compute_instance中调用的几种方式
metadata_startup_script = "${data.template_file.admin.rendered}"
metadata_startup_script = file("initial-setup.sh")
metadata_startup_script = "useradd -m -s /bin/bash 'admin';echo 'admin:password@54w21@123@@' | chpasswd"

已确认信息

脚本内容已成功附加到GCP门户的自定义元数据部分。

排查与解决建议

1. 查询GCP实例启动脚本日志

可以在GCP门户直接查看启动脚本的执行情况:

  • 进入对应虚拟机实例的详情页,切换到日志标签页,筛选startup-script相关日志,查看是否有执行报错或未触发的记录
  • 也可以通过GCP CLI命令查看串口输出,从中提取启动脚本痕迹:
    gcloud compute instances get-serial-port-output [INSTANCE_NAME] --zone [ZONE]
    

2. 检查Azure Pipeline代理池环境

  • 确认代理使用的GCP服务账号权限完整,除实例创建外,需确保能正常触发实例初始化流程
  • 核对代理环境的Terraform版本与本地是否一致,版本差异可能导致元数据处理逻辑异常
  • 验证代理网络是否能正常访问GCP元数据服务,部分网络限制可能影响脚本触发

3. 强制执行脚本的替代方案

如果元数据已存在但未执行,可通过以下方式强制触发:

  • 使用Terraform的null_resource配合remote-exec直接远程执行脚本:
    resource "null_resource" "run_startup_script" {
      depends_on = [google_compute_instance.your_instance]
    
      provisioner "remote-exec" {
        inline = [
          "useradd -m -s /bin/bash 'admin';echo 'admin:password@54w21@123@@' | chpasswd"
        ]
    
        connection {
          type        = "ssh"
          host        = google_compute_instance.your_instance.network_interface.0.access_config.0.nat_ip
          user        = "your-ssh-user"
          private_key = file("path-to-private-key")
        }
      }
    }
    
  • 通过GCP CLI手动覆盖元数据触发执行:
    gcloud compute instances add-metadata [INSTANCE_NAME] --zone [ZONE] --metadata startup-script="$(cat initial-setup.sh)"
    

4. 验证脚本兼容性

  • 确保脚本开头添加#!/bin/bash声明,避免执行环境识别错误
  • 移除脚本中依赖本地环境的路径或变量,确保在GCP实例默认环境中可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:00:17