Jenkins:将git commit hash传递给下游作业

时间:2016-05-25 13:24:52

标签: git jenkins

我有两份工作(A和B)。 作业A指向URL-A的git仓库。 作业B指向不同的git仓库,位于URL-B。

一旦作业A完成并且稳定,它应该触发作业B并传递作业A构建中使用的git commit hash。

实现这一目标的最简单方法是什么?

(作业B对应于从URL-B检出的具有2个参数的脚本:git提交哈希和将包装在Docker镜像中并推送到Docker中心的JAR工件)

5 个答案:

答案 0 :(得分:8)

当你使用GIT插件从Job A结账时,你已经有一个$ {GIT_COMMIT参数Plugin exports

  

环境变量

     

git插件设置了几个你可以使用的环境变量   脚本:

     

GIT_COMMIT - 当前的SHA

     

GIT_BRANCH - 远程存储库的名称(默认为origin),   后跟当前正在使用的分支的名称,例如   "来源/主"或" origin / foo"

     

只需确保将此参数显式传递给作业B(预定义参数,文件中的参数等)。

答案 1 :(得分:4)

在作业B中,选中merged = map( lambda x, y, z: pd.merge(left=x, right=y, left_on=z, right_on="cw_id", how="left",suffixes=('_source','_target')), dfs,dfs2,ids ) 。例如,定义def mymerge(x, y, z): kwargs = dict(left=x, right=y, left_on=z, right_on="cw_id", how="left", suffixes=('_source', '_targee')) return pd.merge(**kwargs) # Initialize merged merged = relations.copy() dfs = [merged, merged, merged, merged] dfs2 = [companies, companies, locations, locations] ids = ["source_cw_id", "target_cw_id", "source_cw_id", "target_cw_id"] myiterable = zip(dfs, dfs2, ids) # Instead of map for args in myiterables: merged = mymerge(*args) ,将名称设置为This project is parameterized。在作业A中,将String Parameter设为COMMITPost-build Actions是作业B的名称,Trigger parameterized build on other projectsProject to buildTrigger when build is Stable Add Parameters,您只需Predefined parametersCOMMIT=$commit通常是作业A中定义的参数。您可以在作业B中添加其他预定义参数,并将值传递给作业A中的全部或部分参数。

答案 2 :(得分:1)

简单的方法是使用 Jenkins参数化触发器插件,通过该插件,您只能在以前的构建中触发构建是稳定的。

您也可以传递参数。在您的情况下,将git commit hash设置为参数并调用Job B.

作业B将接收该参数并进一步处理

答案 3 :(得分:0)

现在看来(参数化触发器2.37,Jenkins 2.204)“触发参数化构建”具有“构建的传递式Git提交”选项。甚至无需在下游作业中进行任何特殊配置即可工作。

答案 4 :(得分:0)

使用(参数化触发器插件 https://plugins.jenkins.io/parameterized-trigger/)设置以下内容:

上游作业A: 构建后操作 -> 在其他项目上触发参数化构建 -> 要构建的项目:JobB。 添加参数 -> 已构建的传递 Git 提交。

下游作业B: 只需检查 Source Code Management 从 None 到 Git 并设置与 JobA 中相同的 repo。 对于 Branch 什么都不做,你甚至可以删除分支,但是 Jenkins 会自动添加 master。 不用担心 Master,这个 JobB 将使用 JobA 的 GitCommit SHA