Jenkinsfile 声明式管道定义动态环境变量

2024-01-12

我是詹金斯管道的新手;我正在定义一个声明性语法管道,但我不知道是否可以解决我的问题,因为我没有找到解决方案。

在这个例子中,我需要将一个变量传递给 ansible 插件(在旧版本中我使用 ENV_VAR 或使用注入插件从文件中注入它)该变量来自脚本。

这是我的完美场景(但它不起作用,因为环境{}):

pipeline {
  agent { node { label 'jenkins-node'}}

  stages {
    stage('Deploy') {
      environment {
        ANSIBLE_CONFIG = '${WORKSPACE}/chimera-ci/ansible/ansible.cfg'
        VERSION = sh("python3.5 docker/get_version.py")
      }
      steps {
        ansiblePlaybook credentialsId: 'example-credential', extras: '-e version=${VERSION}', inventory: 'development', playbook: 'deploy.yml'
      }
    }
  }
}

我尝试了其他方法来测试环境变量在其他帖子中的工作方式,例如:

pipeline {
  agent { node { label 'jenkins-node'}}

  stages {
    stage('PREPARE VARS') {
      steps {
        script {
          env['VERSION'] = sh(script: "python3.5 get_version.py")
        }
        echo env.VERSION
      }
    }
  }
}

但“echo env.VERSION”返回null。

还尝试了相同的示例: - 版本=python3.5 get_version.py- 版本=python3.5 get_version.py> props.file (并尝试注入它,但没有找到如何注入)

如果这是不可能的,我将以 ansible 角色来完成。

UPDATE

Ansible 插件中还有另一个“问题”,要在额外变量中使用变量,它必须使用双引号而不是单引号。

ansiblePlaybook credentialsId: 'example-credential', extras: "-e version=${VERSION}", inventory: 'development', playbook: 'deploy.yml'

您可以在管道块启动之前创建变量。你可以有sh返回 stdout 以分配给这些变量。您没有相同的灵活性来分配环境变量environment节。所以代入python3.5 get_version.py我在哪里echo 0.0.1在此处的脚本中(并确保您的 python 脚本仅将版本返回到 stdout):

def awesomeVersion = 'UNKNOWN'

pipeline {
  agent { label 'docker' }
  stages {
    stage('build') {
      steps {
        script {
          awesomeVersion = sh(returnStdout: true, script: 'echo 0.0.1').trim()
        }
      }
    }
    stage('output_version') {
      steps {
        echo "awesomeVersion: ${awesomeVersion}"
      }
    }
  }
}

上述管道的输出为:

awesomeVersion: 0.0.1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkinsfile 声明式管道定义动态环境变量 的相关文章

随机推荐