这是詹金斯文件。执行失败,因为在将子网添加到存储帐户防火墙的第二个 bat 命令中,subnetid 未获取其值。完整的场景是,我通过 jenkins 管道使用 terraform 将基础设施(vnet 内的一个虚拟机)部署到 Azure,一旦部署完毕,在下一阶段的工作流程是将同一子网列入存储帐户防火墙的白名单。
管道{ 任何代理
environment {
AZURE_RG = 'myrg'
VNET_NAME = 'myvnet'
STORAGE_ACCOUNT_RG = 'str_rg'
STORAGE_ACCOUNT_NAME = 'str_name'
SUBNET_ID = '' // Initialize SUBNET_ID variable
}
stages {
stage('Get Subnet ID') {
steps {
script {
// Construct Azure CLI command dynamically with Groovy string interpolation
def azCliCommand = "az network vnet subnet show -g ${AZURE_RG} -n default --vnet-name ${VNET_NAME} --query id --output tsv"
// Get subnet ID
SUBNET_ID = bat(script: azCliCommand, returnStdout: true).trim()
// Add subnet to storage account network rules
bat "az storage account network-rule add -g ${STORAGE_ACCOUNT_RG} --account-name ${STORAGE_ACCOUNT_NAME} --subnet ${SUBNET_ID} --bypass AzureServices"
}
}
}
}
}
执行失败,因为在第二个将子网添加到存储帐户防火墙的bat命令中,子网ID没有获取其值。完整的场景是,我通过 jenkins 管道使用 terraform 将基础设施(vnet 内的一个虚拟机)部署到 Azure,一旦部署完毕,在下一阶段的工作流程是将同一子网列入存储帐户防火墙的白名单。
预期结果:subnetid 的值必须作为第二个 bat 命令中的参数传递,并且子网必须列入存储帐户白名单。
这是因为:
SUBNET_ID
在environment
块中定义 - 一旦在那里定义,它就无法在阶段内更新;SUBNET_ID
块中定义的
script
是一个不同的变量。如果你想在 Groovy 中使用环境变量,你需要将其引用为 env.SUBNET_ID
。如果您只需要
SUBNET_ID
脚本中的 bat
变量值,请尝试删除环境变量定义。
如果需要在阶段之间共享相同的变量,请在
pipeline
块之前定义它。