1

我有一个带有共享 python 构建脚本的仓库“A”,我今天在 Jenkins 的各种“执行 shell”构建步骤中运行它。我从 job-dsl groovy 代码中播种了这些步骤/脚本。

在存储库“B”(我的应用程序源代码所在的位置)中使用较新的 Jenkins 2 流水线概念,我在这个存储库中的 Jenkinsfile 必须是什么样子才能使其保持干燥并重用我现有的 python 构建脚本?

我研究了插件'workflow-cps-global-lib',并尝试在我的 Jenkins 主机上设置“管道库”,但由于这个设置面向 groovy,它不仅感觉像是正确的方法,或者我只是这样做没有掌握正确的语法。我找不到有关此特定用例的任何示例。

基本上我只想在我的 Jenkinsfile 中这样做:

  1. 为我的应用克隆我的源代码库 ('B')
  2. 使我的存储库“A”中的共享 python 构建脚本可用
  3. 从各种“执行 shell”步骤执行 python 构建脚本
  4. 等等...
4

2 回答 2

5

工作流-cps-global-lib是要走的路。在“管理 Jenkins -> 配置系统 -> 全局管道库”中安装并设置以使用您的存储库。

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

在你的 Jenkinsfile - 加载脚本libraryResource

script = libraryResource 'my_script.py'

并使用它

sh script
于 2016-12-06T11:52:10.710 回答
0

(没有足够的声誉来为上面接受的答案添加评论)

给定一个像这样的python脚本/resources/myscript.py

#!/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'])
于 2019-12-04T10:16:42.950 回答