Jenkins зависает на sh командах после смены агентов - PullRequest
3 голосов
/ 05 мая 2020

Я добавил новый 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'
}

Он снова начинает работать ...

1 Ответ

0 голосов
/ 28 мая 2020

Похоже, эта проблема была связана с чем-то на моем собственном сервере jenkins. Как только я переустановил сервер jenkins, он работал нормально.

...