#groovy #jenkins-pipeline #jenkins-groovy #jenkins-declarative-pipeline
Вопрос:
Моя проблема в том, что я пытаюсь настроить задание Дженкинса с помощью сценария декларативного конвейера, и в связи с этим я столкнулся с некоторой проблемой с вызовом переменной.
например:
pipeline {
agent any
environment {
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64"
M2_HOME="/opt/tools/maven"
PATH="${JAVA_HOME}/bin:${M2_HOME}/bin:$PATH"
IMAGE_NAME = "us.gcr.io/myproject/myimage"
Здесь я использую переменную IMAGE_NAME, поэтому я могу вызывать эту переменную на разных этапах сценария. Ниже вы увидите часть сценария
stage('Build DockerImage for Pathla Backend') {
steps {
echo "Build DockerImage of Pathla Backend"
sh '''
d=`date %Y%m%d%H%M`
build_version=${d}-v${BUILD_NUMBER}
pwd
cd mlp
cd pathla/pathla-service
cp -r /etc/mlp/./*.pem src/main/resources/METINF/resources/
mvn -e clean install -DskipTests=true -Dquarkus.container-image.build=true
IMAGE_PATH="${IMAGE_NAME}:${build_version}"
docker tag us.gcr.io/myproject/myimage $IMAGE_PATH
echo "Docker image to Push:: $IMAGE_PATH"
echo "Once pushed run this command:: docker rmi $IMAGE_PATH"
"
'''
}
}
Теперь, если вы видите эту строку «IMAGE_PATH=»${ИМЯ_ОБРАЗА}:${build_version}» в приведенном выше сценарии, мы используем IMAGE_PATH в качестве переменной 1 (для указания имени изображения) и build_version (для указания версии сборки изображения).
мы вызываем ту же переменную (IMAGE_PATH) в приведенном ниже сценарии для сканирования изображения с помощью облачного сканера PRISMA, но это не работает.
"stage('Scan via PrismaCloud for vulnerabilities of Pathla Backend') {
steps {
script {
withCredentials([
usernamePassword(credentialsId: 'mycluster',
usernameVariable: 'username',
passwordVariable: 'password')
])
{
sh '''
imagename=${IMAGE_PATH}
/opt/mlp/twistcli images scan -u $username -p $password --details --address https://10.XXX.XXX.XXX:8083 ${imagename}
> /bdnfs/pipelines/scan-out-details-backend.txt
если вы проверите указанную выше переменную «${imagename}», она должна вызвать переменную «IMAGE_PATH», но она ее не вызывает и не получает результатов. А также, когда я создаю это задание и запускаю его, я получаю следующую ошибку из журналов:
imagename=
/opt/mlp/twistcli images scan -u **** -p **** --details --address https://10.XXX.XXX.XXX:8083
**"missing image ID"**
Я хочу, чтобы это изображение us.gcr.io/myproject/myimage
было преобразовано в переменную, а затем мы вызываем эту переменную на любом этапе этого сценария конвейера.
Комментарии:
1. Я не рекомендую делать какие-либо запросы о том, чтобы мы что-либо сделали как можно скорее. Если это как-то влияет, то это противоположно тому, чего вы хотите достичь.
2. Вы не можете повторно использовать переменную в оболочке, которая была установлена в другой оболочке… Создайте var IMAGE_PATH внутри блока среды…
3. @daggett я попытался создать путь к изображению внутри блока среды, но проблема в том, что я получаю только имя изображения «us.gcr.io/big-data-poc-216405/pathla-service-prod» и изображение должно сопровождаться датой и прикрепленной к нему версией. Что-то в этом роде: «us.gcr.io/big-data-poc-216405/pathshala-service-prod:$build_version»
4. Может ли кто-нибудь помочь мне с этим вопросом, пожалуйста.
5. Вы настраиваете
IMAGE_PATH
один изsh
сценариев, а затем, на другой сцене, пытаетесь сослаться на это… это, вероятно, никогда не сработает. Если вы хотитеsh
, чтобы скрипт «связывался» с другим, который запускается после него, возможно, сохраните переменную в файле, а затем прочитайте ее.