Моя задача такова:
У меня есть конвейер, который начинается с задания «A1».
Труба заканчивается испытаниями на задании «А5».
Задание "A6" не является частью конвейера. Он развертывает артефакты А1 для производства. А6 имеет параметр номера сборки А1.
Я хочу, чтобы он взял переменную env GIT_COMMIT из A1, используя номер сборки A1, а затем добавил в коммит тег git с номером сборки A6, чтобы я мог отслеживать все изменения развернутых артефактов с помощью git.
Теперь мне удалось разрешить GIT_COMMIT A1, используя этот отличный сценарий:
import hudson.model.AbstractBuild
import hudson.model.FreeStyleProject
import hudson.model.ParametersAction
import hudson.model.StringParameterValue
import hudson.util.StreamTaskListener
import jenkins.model.Jenkins
buildNumber = build.buildVariableResolver.resolve("buildNumber") //Take the parameter for A1 build number
FreeStyleProject job = Jenkins.instance.getItem("A1")
a1build = job.getBuild(buildNumber) //Take the A1 build object
a1Variables = a1build.getEnvironment(new StreamTaskListener())
gitCommit = a1Variables.get("GIT_COMMIT")
println "A1 Git commit: $gitCommit"
Но тогда я застрял. Я думал о 2 решениях:
Используйте groovy для создания тегов - это выглядит слишком сложно. Не нашел, как использовать учетные данные git задания из скрипта groovy или как выполнить команды git внутри скрипта.
Экспорт GIT_COMMIT из A1 в новую переменную окружения на A6 для использования другим плагином git или сценарием оболочки.
Я пытался сделать это двумя способами, но результат нулевой:
Первое:
AbstractBuild myBuild = Thread.currentThread().executable
myBuild.environments.add(0, Environment.create(new EnvVars("A1_GIT_COMMIT", gitCommit)))
Второе:
AbstractBuild myBuild = Thread.currentThread().executable
def pa = new ParametersAction([
new StringParameterValue("A1_GIT_COMMIT", gitCommit)
])
myBuild.addAction(pa)
Буду признателен за любое решение, которое решит проблему, отличный способ или другой путь.