我有两份工作(A和B)。 作业A指向URL-A的git仓库。 作业B指向不同的git仓库,位于URL-B。
一旦作业A完成并且稳定,它应该触发作业B并传递作业A构建中使用的git commit hash。
实现这一目标的最简单方法是什么?
(作业B对应于从URL-B检出的具有2个参数的脚本:git提交哈希和将包装在Docker镜像中并推送到Docker中心的JAR工件)
答案 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
设为COMMIT
。 Post-build Actions
是作业B的名称,Trigger parameterized build on other projects
为Project to build
。 Trigger when build is
Stable
Add Parameters
,您只需Predefined parameters
。 COMMIT=$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