DEL*_*DEL 45 jenkins jenkins-pipeline
我是jenkins管道的新手,我正在定义一个声明性语法管道,我不知道我是否可以解决我的问题,因为我找不到解决方案.
在这个例子中,我需要将一个变量传递给ansible插件(在旧版本中我使用ENV_VAR或者使用inject插件从文件中注入它,该变量来自脚本.
这是我完美的风景(但它不起作用,因为环境{}):
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'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了其他方法来测试env vars在其他帖子中的工作方式,例如:
pipeline {
agent { node { label 'jenkins-node'}}
stages {
stage('PREPARE VARS') {
steps {
script {
env['VERSION'] = sh(script: "python3.5 get_version.py")
}
echo env.VERSION
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但"echo env.VERSION"返回null.
还尝试了相同的例子: - VERSION = python3.5 get_version.py
- VERSION = python3.5 get_version.py> props.file(并尝试注入它,但没有找到如何)
如果这是不可能的,我将在ansible角色中进行.
UPDATE
Ansible插件中还有另一个"问题",要在额外的变量中使用变量,它必须有双引号而不是单引号.
ansiblePlaybook credentialsId: 'example-credential', extras: "-e version=${VERSION}", inventory: 'development', playbook: 'deploy.yml'
Run Code Online (Sandbox Code Playgroud)
bur*_*ttk 95
您可以在管道块启动之前创建变量.您可以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')
}
}
}
stage('output_version') {
steps {
echo "awesomeVersion: ${awesomeVersion}"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上述管道的输出是:
awesomeVersion: 0.0.1
Run Code Online (Sandbox Code Playgroud)
Kev*_*ins 20
在Jenkins 2.76中,我能够将@burnettk的解决方案简化为:
pipeline {
agent { label 'docker' }
environment {
awesomeVersion = sh(returnStdout: true, script: 'echo 0.0.1')
}
stages {
stage('output_version') {
steps {
echo "awesomeVersion: ${awesomeVersion}"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用“管道实用程序步骤”插件,您可以从属性文件中定义可用于所有阶段的通用变量。例如,让props.txt为:
version=1.0
fix=alfa
Run Code Online (Sandbox Code Playgroud)
并将脚本和声明式 Jenkins 管道混合为:
def props
def VERSION
def FIX
def RELEASE
node {
props = readProperties file:'props.txt'
VERSION = props['version']
FIX = props['fix']
RELEASE = VERSION + "_" + FIX
}
pipeline {
stages {
stage('Build') {
echo ${RELEASE}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53232 次 |
| 最近记录: |