У меня есть проект Bitbucket с растущим числом репозиториев, в каждом из которых есть Jenkinsfile, который извлекает один и тот же образ докера для проверки файла, отправленного в Bitbucket.
Проблема в том, что по какой-то причине я не могу использовать «последний» тег в своем образе докера, поэтому каждый файл имеет изображение докера с номером версии.
Чтобы обойти эту проблему, я нашел эту статью, в которой общая библиотека используется для возврата значения для установки переменной среды, которая будет использоваться в команде «image» в моем файле Jenkins. Однако при запуске моего конвейера номер версии, используемый в моем образе докера, отображается как нулевой. Значит, что-то не работает, и я не знаю, что именно.
Это верхняя часть моего файла Jenkins:
@Library(['toolbox','library']) _
pipeline {
environment {
IMAGE_VERSION = getImageVersion()
}
agent {
docker {
image "dockerhub.mycompany.net/docker-repo/validator:${env.IMAGE_VERSION}"
args '-u root -v /var/run/docker.sock:/var/run/docker.sock'
}
}
Это каталог vars моей «библиотеки» (это общая библиотека на уровне папки)
getImageVersion.groovy:
Защитный вызов() { вернуть '1.0.25' }
Но при запуске конвейера я вижу такой вывод:
`
Ошибка: такого объекта нет: dockerhub.mycompany.net/docker-repo/validator:null `
Вывод Jenkins показывает, что библиотека загружена. Я не уверен, что общая библиотека не возвращает значение или я неправильно использую переменную среды.
Кто-нибудь имеет представление о проблеме?

Не существует четко определенного порядка, в котором различные разделы и директивы оцениваются в декларативном конвейере, поэтому я думаю, вы обнаружили, что agent оценивается раньше environment. Возможно, есть более «декларативное» решение, но это должно работать:
@Library(['toolbox','library']) _
def imageVersion = getImageVersion()
pipeline {
agent {
docker {
image "dockerhub.mycompany.net/docker-repo/validator:${imageVersion}"
args '-u root -v /var/run/docker.sock:/var/run/docker.sock'
}
}
Великолепно! Это работает приятно. Я новичок в использовании Jenkins, но спасибо за информацию о порядке оценки. Большое спасибо.