我是詹金斯管道技术的新手。我正在定义一个声明性语法管道,但我不知道是否可以解决我的问题,因为我没有找到解决方案。
在此示例中,我需要将变量传递给ansible插件(在旧版本中,我使用ENV_VAR或使用inject plugin将其从文件中注入),该变量来自脚本。
这是我的理想情况(但由于环境{}而无法使用):
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。
还尝试了以下示例:-VERSION python3.5 get_version.py
= python3.5 get_version.py
-VERSION = > props.file(并尝试注入它,但没有找到方法)
如果这不可能,那么我将扮演角色。
更新
Ansible插件中还有另一个“问题”,要在额外的var中使用var,它必须有双引号而不是单引号。
ansiblePlaybook credentialsId: 'example-credential', extras: "-e version=${VERSION}", inventory: 'development', playbook: 'deploy.yml'
您可以在管道块开始之前创建变量。您可以将sh
return
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')
}
}
}
stage('output_version') {
steps {
echo "awesomeVersion: ${awesomeVersion}"
}
}
}
}
上述管道的输出为:
awesomeVersion: 0.0.1
我是詹金斯管道的新手;我正在定义一个声明性语法管道,我不知道我是否能解决我的问题,因为我没有找到解决方案。 我在其他帖子中尝试了其他方法来测试env var是如何工作的,例如: 但是“echo env.version”返回null。 还尝试了相同的示例:-version=-version=>props.file(并尝试注入它,但没有找到如何注入)
我已经在Jenkins上创建了一个基本的声明性管道。当我运行构建时,它会抛出以下错误 Jenkins服务器使用最新版本的默认插件设置为默认。Jenkinsfile如下所示 当Jenkins读取Jenkinsfile时,看起来块失败了,这在Jenkinsfile看起来很混乱。
问题内容: 我正在尝试获得一个如下所示的声明性管道: 问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。 有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例: 但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些
我有以下管道: 不幸的是,这引发了: groovy.lang.MissingPropertyException:没有这样的属性:org.kohsuke.groovy上的类groovylang.Binding.getVariable(Binding.java:63)的master:org.jenkinsi.plugins.scriptsecurity.sandbox.groovy-SandboxIn
问题内容: Jenkins声明性管道中的参数可以动态吗? 我希望选择选项值在运行时由函数填充。以下代码确实生成了选项列表,但它们似乎过时了- 可能是在我第一次运行此代码时生成的。如果AMI列表更改,则选择将保持不变。我希望每次选择都运行此命令。 EDIT 我最终使用,带有扩展选择参数。目前它不支持该参数,因此我对其进行了修改https://review.openstack.org/#q,I0c6a
问题内容: 我正在尝试这样做 结果: null / build / 如何使用全局环境创建环境? 问题答案: 我认为您应该使用: 就像在“环境”步骤中一样,您正在定义环境变量,以后可以通过 env.your-variable-name访问