Использовать "ярлык" или определить шаблон модуля в jenkinsfile для плагина kubernetes?
В основном
Я пытаюсь использовать ярлык при использовании kubernetes-plugin для Jenkins, но немного запутался. В моемpipeline
ниже я пытаюсь построить тестовую работу в parallel
шаги с разными метками (агентами).
Я уже настроил плагин с шаблоном pod и контейнером в моей конфигурации Jenkins, где я использую те же настройки, что и в конвейере podTemplate
определено.
Проблема
Проблема в том, что когда я использую agent label
на этапе 2 вместо изображения, которое я указываю в конфигурации, выполняется изображение jnpl someimage:latest
.
В stage 1
где я определяю модуль в конвейере, проблем нет, и требуемые изображения работают нормально.
Вопрос
Что я делаю не так?
Вот мойjenkinsfile
и конфиг kubernetes-плагина в Jenkins:
def podTemplate = """
apiVersion: v1
kind: Pod
spec:
containers:
- name: k8s
image: someimage:latest
command:
- sleep
args:
- infinity
volumeMounts:
- name: workspace-volume
mountPath: /home/jenkins/agent
workingDir: "/home/jenkins/agent"
volumes:
- name: "workspace-volume"
persistentVolumeClaim:
claimName: "jenkins-worker-pvc"
readOnly: false
"""
pipeline {
agent none
stages {
stage("Parallel") {
parallel {
stage("1.k8s") {
agent {
kubernetes {
yaml podTemplate
defaultContainer 'k8s'
}
}
steps {
sh """
mvn -version
"""
}
}
stage("2. k8s") {
agent { label 'k8s' }
steps {
sh """
mvn -version
"""
}
}
stage("win") {
agent { label 'windows' }
steps {
bat "dir"
}
}
}
}
}
}
1 ответ
Вы не указали изображение для stage
с участием label
k8s
а также windows
.
Вы можете прочитать в документации, что:
Плагин создает Kubernetes Pod для каждого запущенного агента, определенного образом Docker для запуска, и останавливает его после каждой сборки.
Агенты запускаются с использованием JNLP, поэтому ожидается, что образ автоматически подключается к мастеру Jenkins.
Ты используешь podTemplate
и я бы посоветовал настроить container
, это может выглядеть так:
podTemplate(containers: [
containerTemplate(name: 'maven', image: 'maven:3.3.9-jdk-8-alpine', ttyEnabled: true, command: 'cat'),
containerTemplate(name: 'golang', image: 'golang:1.8.0', ttyEnabled: true, command: 'cat')
]) {
node(POD_LABEL) {
stage('Get a Maven project') {
git 'https://github.com/jenkinsci/kubernetes-plugin.git'
container('maven') {
stage('Build a Maven project') {
sh 'mvn -B clean install'
}
}
}
stage('Get a Golang project') {
git url: 'https://github.com/hashicorp/terraform.git'
container('golang') {
stage('Build a Go project') {
sh """
mkdir -p /go/src/github.com/hashicorp
ln -s `pwd` /go/src/github.com/hashicorp/terraform
cd /go/src/github.com/hashicorp/terraform && make core-dev
"""
}
}
}
}
}
Вы можете узнать больше о конфигурации контейнера и поддержке группы контейнеров.