如何在Jenkins中创建一个公共函数来执行python脚本

2024-04-26 04:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个通用的python脚本,需要在多个管道作业中使用。 我所做的是创建一个qroovy文件,方法如下。

def create_slaves()
{
    def cmd = 'python "-u my_script.py'
    def proc = cmd.execute()
    proc.waitfor()
}
return this

执行引发了此异常。

Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods execute java.lang.String

所以我觉得这不是正确的方法。有人知道在管道中执行通用python脚本的合适方法吗?


Tags: 文件方法py脚本cmdexecute管道my
3条回答

burnettk's answer在正确的轨道上,但不完整。我不知道直接运行python脚本的官方方法,因此请尝试以下解决方法

将python脚本存储在shared library中,特别是在resources文件夹中。(参考资料/yourscript.py)

然后将文件作为字符串导入并将其写入文件。例如:

script{
    def yourScriptAsaString = libraryResource '../resources/yourscript.py' 
    writeFile file: 'yourscript.py', text: yourScriptAsaString
    sh "python yourscript.py"
}

使用jenkins shared library并使用其中的sh步骤。

顺便说一句,也许您的实际用例比您共享的用例看起来更微妙(在这种情况下,当然,使用共享库),但我想我只需要在每个Jenkinsfile中使用sh步骤,如下所示,并保持简单:

pipeline {
  agent { label 'docker' }
  stages {
    stage('build') {
      steps {
        sh 'python -u my_script.py'
      }
    }
  }
}

你遇到了詹金斯,他小心翼翼地阻止了你调用的一个方法。你可以通过以下几种方式来克服这个问题:

  1. 安装并启用https://wiki.jenkins.io/display/JENKINS/Permissive+Script+Security+Plugin

只需向jenkins.xml添加一个参数即可启用它

  1. 转到经理Jenkins->;正在审批脚本

你会看到被阻止的方法。点击“批准”,如果我的理解是正确的,就不会再被阻止。

在函数调用的所有方法获得批准之前,您可能需要对此进行多次迭代。

相关问题 更多 >