Я добавил новый logi c в свой Jenkinsfile, который на определенной стадии c меняю агентов и запускаю такие команды, как sh.
Проблема:
Я хотел менять агентов и запускать там команды. Однако это похоже на состояние гонки, когда, если агент конвейера запускает docker (в декларативном блоке конвейера) и на одном из этапов, на котором вы меняете агент, агент не запускает команды оболочки, он просто зависает и остается застрял.
Обратите внимание, что я хочу, чтобы мой docker и метка находились в блоке объявления конвейера, а не на определенных c этапах (с использованием агента none), так как я хочу, чтобы все этапы, кроме последнего этапа, были запустить в этом конкретном c агенте и указать c docker.
Есть ли в этом скрипте ошибка? Я сделал миниатюрный скрипт, который воспроизводит эту «ошибку», вы можете запустить его на своем собственном jenkins, чтобы опробовать его на себе (добавьте docker -credentials к паролям в jenkins), это похоже на ошибку с jenkins:
#!/usr/bin/env groovy
pipeline
{
agent
{
docker
{
alwaysPull true
image 'ubuntu:xenial'
registryCredentialsId 'docker-credentials'
registryUrl 'https://index.docker.io/v1/'
label 'master'
}
}
stages
{
stage("Initialize")
{
steps
{
script
{
println("Initializing")
}
}
}
stage("First agent stage")
{
steps
{
script
{
sh(script: "ls", label: "Working shell scripts")
}
}
}
stage("Second agent stage")
{
agent
{
label 'master'
}
steps
{
script
{
sh(script: "ls", label: "Hung shell scripts")
}
}
}
}
}
Обратите внимание, если вы измените это:
agent
{
docker
{
alwaysPull true
image 'ubuntu:xenial'
registryCredentialsId 'docker-credentials'
registryUrl 'https://index.docker.io/v1/'
label 'master'
}
}
на это:
agent
{
label 'master'
}
Он снова начинает работать ...