Использовать "label" или определить шаблон pod в jenkinsfile для плагина kubernetes? - PullRequest
0 голосов
/ 23 апреля 2020

В общем

Я пытаюсь использовать метку при использовании kubernetes-plugin для Дженкинса, но я немного запутался. В моем pipeline ниже я пытаюсь построить тестовое задание в parallel шагах с разными метками (агентами).

Я уже настроил плагин с шаблоном pod и контейнером в моей конфигурации Jenkins, где я используйте те же настройки, что и в конвейере podTemplate.

Проблема

Проблема в том, что когда я использую agent label на этапе 2, вместо изображения, на которое я указываю, запускается образ jnpl в конфигурации someimage:latest.

В stage 1, где я определяю модуль в конвейере, проблем нет, и необходимые изображения работают нормально.

Вопрос

Что я делаю не так? Вот мой jenkinsfile и конфиг kubernetes-plugin в 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"
                    }
                }
            }
        }
    }
}

enter image description here

1 Ответ

1 голос
/ 23 апреля 2020

Вы не указали изображение для 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
                    """
                }
            }
        }

    }
}

Подробнее о Конфигурация контейнера и Поддержка группы контейнеров

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