在Jenkinsfile管道groovy中获取python脚本的输出结果

时间:2020-04-17 18:22:47

标签: python jenkins jenkins-pipeline sh

我正在尝试将python脚本的输出分配给变量。

这是我的电话

stage('Deployment on FTP') {
    steps {
        script {
            def warName = sh(script: 'python ../scripts/myPythonScriptHere.py', returnStdout: true)
        }
        ...
    }
}

这是我的配置(在Linux服务器上):

ci/
    -- prod/
                -- Jenkinsfile.groovy
    -- scripts/
                -- myPythonScriptHere.py

Jenkins告诉无法打开文件“ ...” [Errno 2]没有这样的文件或目录

我该怎么做?

谢谢

2 个答案:

答案 0 :(得分:0)

您在此处所做的声明本身是错误的。在sh(script:....)内部,该函数需要一个shell脚本。在这里,python执行将无法正常工作。要获取python的输出,您将必须编写一个shell脚本来为您完成这项工作。这意味着,您将必须在sh(script:...)内编写一个shell脚本,它将执行您的python脚本并将其输出捕获到一个变量中并返回它。例如:

                  steps {
                    script {
                       def warName = sh(script: '#!bin/bash
                       var output = python ../scripts/myPythonScriptHere.py
                       return output', returnStdout: true)
        }
    }
}```

答案 1 :(得分:0)

stage('Deployment on FTP') {
        steps {
            script {
                env.WAR_NAME = sh(script: "python scripts-ci/scripts/build/front/scripts/lib/war_name.py ${customerProfileId} ${FORCE_CUSTOMER_NAME}", returnStdout: true).toString().trim()
            }
        }
    }

这是我当前 Jenkinsfile 工作的代码(当我克隆需要的 python 脚本时,scripts-ci beeing 文件夹。

        stage("Git checkout") {
          steps {
            dir("scripts-ci") {
                git branch: "${GIT_BRANCH_CI}",
                credentialsId: "${GIT_CREDENTIALS_ID}",
                url: "${GIT_URL_CI}"
            }
        }
    }