Есть несколько проблем с этим:
Вы можете выделить node
только на верхнем уровне
pipeline {
agent ...
}
Или вы можете использовать выделение узла для каждого этапа следующим образом:
pipeline {
agent none
....
stages {
stage("My stage") {
agent ...
steps {
// run my steps on this agent
}
}
}
}
Вы можете проверить документы здесь
Предполагается, что steps
будут выполняться на выделенном узле (или в некоторых случаях они могут выполняться вообще без выделения узла).
Declarative Pipeline
и Scripted Pipeline
- это две разные вещи. Да, их можно смешивать, но scripted pipeline
предназначено либо для абстрагирования некоторой логики в разделяемую библиотеку , либо для предоставления вам возможности стать «хардкорным мастером ниндзя» и полностью написать свой собственный пользовательский конвейер с использованием конвейера scripted
и без сахара declarative
.
Я не уверен, как настроено ваше Docker <-> Jenkins
соединение, но вам, вероятно, будет лучше, если вы установите плагин и используете agent templates
для предоставления необходимых вам агентов.
Если у вас есть Docker Swarm
, вы можете установить Docker Swarm Plugin , а затем в своем конвейере вы можете просто настроить pipeline { agent { label 'my-agent-label' } }
. Это автоматически обеспечит ваш Jenkins агентом в контейнере, который использует указанное вами изображение.
Если вы выставили /var/run/docker.sock
своему Дженкинсу, то вы можете использовать И еще один подключаемый модуль Docker , который имеет ту же концепцию.
Таким образом, вы можете удалить конфигурацию агента в agent template
, и ваш конвейер будет использовать label
только для того, чтобы иметь агента, который ему нужен.