Jenkinsfile语法 - 有一个共享python构建步骤的DRY示例吗?

时间:2016-11-25 13:00:50

标签: python jenkins jenkins-pipeline jenkinsfile

我有一个回购" A"使用共享的python构建脚本,我今天在各种"执行shell"在詹金斯建立步骤。我从job-dsl groovy代码中获取这些步骤/脚本。

在回购中使用较新的Jenkins 2 Pipeline-concept" B" (我的应用程序源代码所在的位置)我的Jenkins文件在这个repo中看起来要保持DRY并重用现有的python构建脚本吗?

我研究了插件&cc; workflow-cps-global-lib'我试图建立"管道图书馆"在我的詹金斯大师,但由于这个设置groovy导向它不仅感觉是正确的方式去或我只是没有得到正确的语法。我找不到关于这个特定用例的任何例子。

基本上我只想在我的Jenkins文件中使用它:

  1. 克隆我的应用
  2. 的源代码库(' B')
  3. 从我的回购中创建我的共享python构建脚本" A"可用
  4. 从各种"执行shell"执行python构建脚本。步骤
  5. 诸如此类...

2 个答案:

答案 0 :(得分:5)

workflow-cps-global-lib是要走的路。安装它并在'Manage Jenkins - >中设置配置系统 - >全球管道库使用您的存储库。

如果您决定使用python脚本而不是groovy,请将所有python脚本放在(root)/ resources目录中。

在Jenkinsfile中

- 使用<?php $array =['1,2,3,4','3,4,5','2,3']; $arr1 = []; for($i=0; $i<count($array); $i++) { $j='arr'.$i; $j= []; if($i==0){ array_push($j, $array[$i]); } else{ $a = explode(',',$array[$i-1]); $b = explode(',',$array[$i]); $c = array_intersect($a,$b); $d= implode(',',$c); array_push($j, $d); } echo "<pre>"; print_r($j); }

加载脚本
libraryResource

并使用它

script = libraryResource 'my_script.py'

答案 1 :(得分:0)

(声誉不足,无法在上面接受的答案中添加评论)

/resources/myscript.py中给出这样的python脚本:

#!/usr/bin/env python3
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--echo")
args = parser.parse_args()
print(args.echo)

使用这样的Jenkins函数:

def runPy(String scriptPath, def args) {
    String script = libraryResource(scriptPath)
    String argsString = args.join(' ')
    sh "python3 -c '${script}' ${argsString}"
}
runPy('myscript.py', ['--echo', 'foo'])