【问题标题】:Can I create new jobs in a Jenkins pipeline script我可以在 Jenkins 流水线脚本中创建新作业吗
【发布时间】:2016-12-04 11:06:43
【问题描述】:

我想知道是否可以从管道 groovy 脚本中创建新的 Jenkins 构建作业。我知道可以启动现有作业,但我也想在脚本中创建新作业然后启动它们。

这将允许我在我的脚本中创建一个“作业图”。对于作业图,我的意思是可能依赖于彼此结果的构建作业的集合,并且该图确定哪些作业可以并行运行。类似的东西

         /- WindowsBuild---------- WindowsRunTests -------------\
        /                                                        \
JobRoot --- LinuxBuild------------ LinuxRunTests ----------------/-- AllDone     
       \                       \                                / 
        \                       \- LinuxRunDynamicAnalysis ----/
         \- StaticCodeAnalysis -------------------------------/

在切换到流水线作业之前,我通过手动创建作业并设置它们的依赖项来完成此操作。现在我想在脚本中创建必要的作业。

使用 jenkins 管道中当前的并行模型,我有一个构建阶段、一个测试阶段等,但这些阶段会减慢整体执行速度,因为例如 WindowsRunTests 步骤不会在所有构建步骤之前启动尽管它只需要 WindowsBuild 步骤的结果,但在所有平台上都已完成。

它还可以改进管道的可视化并分离与parallel() 命令混合在一起的控制台输出。

【问题讨论】:

  • 查看以下内容:stackoverflow.com/questions/16963309/… 它可以帮助您获得所需的东西吗?
  • 我还没有时间仔细研究。与此同时,我放弃了使用 jenkins 作业实现构建作业图的想法,并最大限度地减少了在 jenkins 脚本中完成的工作。我有一个 CMake 基础 C++ 项目,然后我将“工作”作为 CMake 目标来实现。这样做的好处是管道的大部分部分都可以在本地运行,并且 cmake 脚本已经具有设置作业图所需的大量信息(文件位置)。 jenkins 脚本现在只在 linux slave 和 windows slave 上构建管道目标。
  • cmake 方法的一个缺点是它没有可视化哪些目标/作业已成功处理,哪些失败了。此信息必须从命令行输出“眼睛解析”。

标签: jenkins jenkins-pipeline


【解决方案1】:

我不确切知道它是否可以帮助您,但您可以通过解决方法来做到这一点。您可以运行 python 脚本,并在该脚本中通过复制现有作业模板来创建新作业:

jen_conn = connect_to_jenkins(jenkins_url, jenkins_user, jenkins_password)

    jen_conn.copy_job('copy-job-dev', jenkins_job_name)

功能如下:

def connect_to_jenkins(jenkins_url, jenkins_user, jenkins_password):
server = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_password)
try:
    user = server.get_whoami()
except BaseException as error:
    print error
    print "Could not connect to Jenkins."
    exit()
return server

您必须使用适用于 python 的 jenkins 插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2020-09-28
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多