【问题标题】:Trigger jobs in Jenkins for particular directory commit在 Jenkins 中为特定目录提交触发作业
【发布时间】:2018-02-27 02:37:41
【问题描述】:

我有存储库结构

myproject/ ¦ ¦--jobs/ ¦ ¦--job1/{job1 directories & files} ¦ ¦--job2/{job2 directories & files}

还有两个 Jenkins Jobs job1 用于第一个路径,job2 用于第二个路径。 因此,如果提交在 job1 目录路径 job1 应该触发,如果提交在 job2 目录路径 job2 在 Jenkins 应该触发。 但问题是合并拉取请求被合并到 master 两个作业都被触发,即使提交只是作业路径之一。

【问题讨论】:

  • 你能详细说明你的问题吗?我很困惑。
  • 所以,我的存储库结构为:myproject/ ¦ ¦--jobs/ ¦ ¦--job1/{job1 目录和文件} ¦ ¦--job2/{job2 目录和文件} 并且为两个单独的路径配置了 2 个 Jenkins 作业,一个用于作业 1 目录路径,一个用于作业 2 目录路径。因此,如果我对 job1 目录或文件 job2 中的提交的拉取请求合并也被触发。

标签: git jenkins bitbucket


【解决方案1】:

这不是常见的情况。我认为你有两种方法。

  1. 拥有两个独立的存储库(获取公共资源并作为库保存),这并不容易。
  2. 在 jenkins 中进行调整
  3. 如果可能,在您的存储库中编写相同类型的逻辑(如下所示)。

这是在 jenkins 中实现此目的的一种方法(我的观点 2)。
一个问题是两个 jenkins 将开始,但一个将在没有完成 jenkins 的情况下终止-工作。

您可以为此编写一个 bash 脚本。 JOB-1 中的逻辑是如果提交的文件在 job2 目录下则终止,对于 JOB-2 相同(如果文件来自 job2 目录则终止)

添加此脚本并运行(作为第一个)Job-1 jenkins

#!/bin/bash

# Get count of job2 directory files 
count_of_job2_files=`git show --pretty="format:" --name-only <commitID> | grep "job2/" | wc -l` 

# if Job2 dir files are more than 0 then termiate the jenkins job
[ $count_of_job2_files -gt 0 ] && exit 0 ; 

在 job2 jenkins 中添加为相同类型的脚本。

注意: 逻辑是假设您使用 git 作为存储库编写的

【讨论】:

  • 尝试在你的存储库中运行这个命令 git show --pretty="format:" --name-only 然后你就会明白其中的逻辑了。
  • 1.如果我在 myproject 目录中有 2 个以上的作业,例如 100 个作业,单独的 100 个存储库将不起作用。
  • 2.我不想触发两个 Jenkins 工作,比如如果我有 100 个工作,它会触发所有工作。
  • 我已经提到过,这并不容易。你也没有提到会有100个工作!
  • 这就是为什么stackoverflow总是说要详细说明问题并写下您的所有要求。
【解决方案2】:

找到解决方案,使用 ScriptTrigger 插件并在轮询时编写脚本,它将检查特定目录的提交。

【讨论】:

    猜你喜欢
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多