Как запустить все этапы из задания jenkins на одном узле при использовании агента docker? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть конвейер Jenkins, который работает на docker агентах, и каждый раз, когда он входит в стадию с другим агентом, он меняет узел Jenkins. Как я могу заставить его работать всегда на одном и том же узле?

У меня есть 3 узла: master , slave-1 и slave-2 . Мой конвейер иногда, просто в качестве примера, начинается с использования master , затем, когда он вызывает агента image- docker -1 , он использует slave-1 , а затем когда он вызывает агента image- docker -2 , он снова использует master .

Как заставить его использовать всегда slave-1 ? Я знаю, что если бы я не использовал docker в качестве агента, я мог бы использовать что-то вроде:

node (label: "slave-1") {
(...)

pipeline {
agent { label "slave-1 }
(...)

Но я думаю, что это не так.

Вот мой конвейер:

node {
properties([
          pipelineTriggers(
              [cron('H 00 * * 1-5') ]
          )]
  )
  workloadPipeline = load("ImagePull.groovy")
  workloadPipeline
}

pipeline {
  options {
    ansiColor('xterm')
    timestamps()
  }
  agent none    
  environment {
  TOKEN = credentials("token") 
  HOME = '.'
  }    
  stages {
    stage("initiating"){
      agent {
        docker {
          image 'image-docker-1'
          args '--entrypoint="" -u root -v /var/run/docker.sock:/var/run/docker.sock'
        }
      }
      stages {
        stage('docker 1 scanning') {     
          steps {
            script {
              workloadPipeline.loopImages(Images)
            }
          }             
        }
        stage ('docker 1 test'){
         (...)
        }
      }
    }
    stage('docker 2 scanning') {
      agent {         
        docker {          
          image 'image-docker-2'
          args '--entrypoint="" -u root -v /var/run/docker.sock:/var/run/docker.sock'         
        }
      }
      steps {
        script {
            workloadPipeline.Scanning()
        }
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Спасибо за ответ @ Washwater. На самом деле мне нужно было внести небольшое изменение.

Если я использую то, что вы предложили, он возвращает ошибку «Не указан тип агента. Должно быть одно из [any, docker, dockerfile, label, none] "

agent { 
    node { label "slave-1" } 
    docker {
        image 'image-docker-1'
        args '--entrypoint="" -u root -v /var/run/docker.sock:/var/run/docker.sock'
    }
}

Итак, правильный синтаксис должен быть:

agent { 
    docker {
        image 'image-docker-1'
        args '--entrypoint="" -u root -v /var/run/docker.sock:/var/run/docker.sock'
        label "slave-1"
    }
}
0 голосов
/ 16 апреля 2020

Использование:

agent { 
    docker {
        image 'image-docker-1'
        args '--entrypoint="" -u root -v /var/run/docker.sock:/var/run/docker.sock'
        label 'slave-1'
    }
}

Поместите это или на уровне конвейера, для того, чтобы использовать все ваши этапы, или на каждом этапе, если вы хотите разделиться на этап *

Спасибо Жоао за небольшая коррекция:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...