jenkins:: ERROR: Expected a step @ & pass generated values to downstream jobs
jenkins:: ERROR: Expected a step @ & pass generated values to downstream jobs
我有一个 python 文件 peekaboo.py
,它在独立 exec 上输出 json,如下所示。
python 文件输出(JSON):
{"fernet_key": "some fernet_key", "db_url": "some_db_url", "pki_password": "some_pki_password"}
然而,当 jekins 试图 运行 同一个 python 文件时,它失败了,如下所示。
顺便说一下,这个 python 文件假设为 pki_client_cacert_password、db_url、fernet_key 设置值,这些值将被传递给 ansible playbook
pipeline {
parameters {
string(defaultValue: '', description: '', name: 'pki_client_cacert_password', trim: true)
string(defaultValue: '', description: '', name: 'db_url', trim: true)
}
stages {
stage('DeployToDev') {
steps {
env.artifacts = sh "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
echo "${env.artifacts}"
ansiblePlaybook credentialsId: "${env.git_credential_id}", disableHostKeyChecking: true, extras: "-e \"pki_client_cacert_password=${env.pki_client_cacert_password} db_url=${env.db_url} fernet_key=${env.fernet_key} use_isrg_freetds=false\"",
}
}
}
}
我们得到以下错误
错误:
WorkflowScript: 32: Expected a step @ line 32, column 21.
env.artifacts = sh "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
我的问题是,
- 如何修复此错误
- 如何访问生成的值以传递给 ansible 作业。
您可以尝试使用 sh 的赋值语句:
script{
env.artifacts = sh(
returnStdout: true,
script: "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
)
}
这仅适用于管道作业,不适用于自由式作业。
我不得不添加脚本标签,并且还使用双引号 "
将字符串括起来
script{
env.artifacts = sh(
returnStdout: true,
script: "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
)
}
我有一个 python 文件 peekaboo.py
,它在独立 exec 上输出 json,如下所示。
python 文件输出(JSON):
{"fernet_key": "some fernet_key", "db_url": "some_db_url", "pki_password": "some_pki_password"}
然而,当 jekins 试图 运行 同一个 python 文件时,它失败了,如下所示。
顺便说一下,这个 python 文件假设为 pki_client_cacert_password、db_url、fernet_key 设置值,这些值将被传递给 ansible playbook
pipeline {
parameters {
string(defaultValue: '', description: '', name: 'pki_client_cacert_password', trim: true)
string(defaultValue: '', description: '', name: 'db_url', trim: true)
}
stages {
stage('DeployToDev') {
steps {
env.artifacts = sh "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
echo "${env.artifacts}"
ansiblePlaybook credentialsId: "${env.git_credential_id}", disableHostKeyChecking: true, extras: "-e \"pki_client_cacert_password=${env.pki_client_cacert_password} db_url=${env.db_url} fernet_key=${env.fernet_key} use_isrg_freetds=false\"",
}
}
}
}
我们得到以下错误
错误:
WorkflowScript: 32: Expected a step @ line 32, column 21.
env.artifacts = sh "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
我的问题是,
- 如何修复此错误
- 如何访问生成的值以传递给 ansible 作业。
您可以尝试使用 sh 的赋值语句:
script{
env.artifacts = sh(
returnStdout: true,
script: "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
)
}
这仅适用于管道作业,不适用于自由式作业。
我不得不添加脚本标签,并且还使用双引号 "
将字符串括起来
script{
env.artifacts = sh(
returnStdout: true,
script: "/var/lib/jenkins/python_jobs/peekaboo_venv/bin/python3 /var/lib/jenkins/python_jobs/peekaboo.py --db_url=${env.db_url} --pki_password=${env.pki_client_cacert_password}"
)
}