如何在詹金斯管道中将敏感的动态值作为参数传递

问题描述 投票:0回答:1

这是詹金斯文件。执行失败,因为在将子网添加到存储帐户防火墙的第二个 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 命令中的参数传递,并且子网必须列入存储帐户白名单。

azure jenkins terraform jenkins-pipeline jenkins-groovy
1个回答
0
投票

这是因为:

  • 您的空
    SUBNET_ID
    environment
    块中定义 - 一旦在那里定义,它就无法在阶段内更新;
  • SUBNET_ID
     块中定义的 
    script
    是一个不同的变量。如果你想在 Groovy 中使用环境变量,你需要将其引用为
    env.SUBNET_ID

如果您只需要

SUBNET_ID
脚本中的
bat
变量值,请尝试删除环境变量定义。

如果需要在阶段之间共享相同的变量,请在

pipeline
块之前定义它。

© www.soinside.com 2019 - 2024. All rights reserved.