build pipeline plugin是持续集成服务器Jenins的插件,最近发现build pipeline在传参数过程中,再出现参数重名的情况下,此插件会用down stream的参数去覆盖up stream的参数。
/**
* Given an Upstream AbstractBuild and a Downstream AbstractProject will retrieve the associated ParametersAction.
* This will result in parameters from the upstream build not overriding parameters on the downstream project.
* @param upstreamBuild - The AbstractBuild
* @param downstreamProject - The AbstractProject
* @return - AbstractBuild's ParametersAction
*/
public static Action getAllBuildParametersAction(AbstractBuild<?, ?> upstreamBuild, AbstractProject<?, ?> downstreamProject) {
// Retrieve the List of Actions from the downstream project
final ParametersAction dsProjectParametersAction = ProjectUtil.getProjectParametersAction(downstreamProject);
// Retrieve the List of Actions from the upstream build
final ParametersAction usBuildParametersAction = BuildUtil.getBuildParametersAction(upstreamBuild);
return mergeParameters(usBuildParametersAction, dsProjectParametersAction);
}
/**
* Merges two sets of ParametersAction
* @param base ParametersAction set 1
* @param overlay ParametersAction set 2
* @return - Single set of ParametersAction
*/
public static ParametersAction mergeParameters(ParametersAction base, ParametersAction overlay) {
final LinkedHashMap<String, ParameterValue> params = new LinkedHashMap<String, ParameterValue>();
if (base != null) {
for (ParameterValue param : base.getParameters()) {
params.put(param.getName(), param);
}
}
if (overlay != null) {
for (ParameterValue param : overlay.getParameters()) {
params.put(param.getName(), param);
}
}
return new ParametersAction(params.values().toArray(new ParameterValue[params.size()]));
}