Ваша текущая сборка будет выводить указанную ниже причину сборки при запуске пользователем.
env.current_BUILD_CAUSE = currentBuild.getBuildCauses().toString()
env.current_BUILD_CAUSE:
[
{
"_class": "hudson.model.Cause$UpstreamCause",
"shortDescription": "Started by upstream project \"ABC/XYZ/JobA\" build number 621",
"upstreamBuild": 621,
"upstreamProject": "ABC/XYZ/JobA",
"upstreamUrl": "job/ABC/job/XYZ/job/JobA/"
}
]
Итак, теперь я бы взял необходимые параметры из приведенных выше значений. Я не очень хорошо знаком с методом groovy. Итак, мы использовали директиву sh
.
env.upstream_BUILD_NUMBER = sh(script: 'echo \"${current_BUILD_CAUSE}\" | jq .[].upstreamBuild | tr -d \'"\'', returnStdout: true).trim()
env.upstream_JOB_NAME = sh(script: 'echo \"${current_BUILD_CAUSE}\" | jq .[].upstreamProject | tr -d \'"\'', returnStdout: true).trim()
env.upstream_JOB_URL = sh(script: 'echo \"${current_BUILD_CAUSE}\" | jq .[].upstreamUrl | tr -d \'"\'', returnStdout: true).trim()
Поскольку вы не хотите передавать параметры от одного к другому, я бы просто скрутил JSON api сборку, а затем используйте ее для получения значений, которые требуются от сборки восходящего потока. Я использую здесь учетные данные, поскольку вам может потребоваться или не потребоваться аутентификация для jenkins в соответствии с вашими требованиями. Вы можете удалить это, если оно не требуется, вместе с аргументами -u в curl.
withCredentials([usernamePassword(credentialsId: 'your-CredentialsID-for-Jenkins', usernameVariable: 'user', passwordVariable: 'password')]) {
env.upstream_OWNER_ID = sh(script: "curl -s -u $user:$password https://${JENKINS_DASHBOARD}/${upstream_JOB_URL}/{upstream_BUILD_NUMBER}/api/json | jq -r \'.actions[].causes[]?.userId | select(length>0)\'", returnStdout: true).trim()
}
Теперь у меня будет все, что нужно как для текущей, так и для восходящей сборки, без передачи каких-либо параметров от или до.
Примечание : приведенные выше примеры кода также содержат escape-последовательности, которые я сейчас использую в своей работе jenkins.