Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 詹金斯::错误:需要一个步骤@&;将生成的值传递给下游作业_Ansible_Jenkins Pipeline - Fatal编程技术网

Ansible 詹金斯::错误:需要一个步骤@&;将生成的值传递给下游作业

Ansible 詹金斯::错误:需要一个步骤@&;将生成的值传递给下游作业,ansible,jenkins-pipeline,Ansible,Jenkins Pipeline,我有一个python文件peekaboo.py,它在独立的exec上输出一个json,如下所示 python文件输出(JSON): 然而,当jekins试图运行相同的python文件时,它失败了,如下所示 顺便说一句,假设这个python文件为pki_客户端_cacert_密码、db_url、fernet_密钥设置值,这些值将传递给ansible playbook pipeline { parameters { string(defaultValue: '', descripti

我有一个python文件
peekaboo.py
,它在独立的exec上输出一个json,如下所示

python文件输出(JSON):

然而,当jekins试图运行相同的python文件时,它失败了,如下所示

顺便说一句,假设这个python文件为pki_客户端_cacert_密码、db_url、fernet_密钥设置值,这些值将传递给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}"
                        )
                    }
    

    太好了,让我更新我的答案
                    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}"
                        )
                    }