Table of Contents

О чем это

Автоматизация сборки Java-приложения с помощью Jenkins в кластере Kubernetes
Вариация на тему туториалов:

Установка Jenkins в кластер Kubernetes

Установка Jenkins в кластер Kubernetes с помощью helm

Настройка jenkins для работы в кластере kubernetes

https://www.oracle.com/webfolder/technetwork/tutorials/obe/oci/configure_jenkins_kubernetes_plugin/configurekubernetesplugin.html

Если разворачивание jenkins осуществлялось с помощью helm, то в кластере kubernetes уже все настроено (service account и прочее).
Чтобы запускать конвейеры в кластере kubernetes достаточно в разделе Cloud настроить:

kubectl cluster-info | grep 'Kubernetes master'
cat ~/.kube/config | grep certificate-authority-data: | cut -d: -f2 | tr -d ' ' | base64 -d

Проверка работоспособности плагина Jenkins kubernetes

Freestyle project

При использовании типа Freestyle Project пайплайн конфигурируется из web-интерфейса.

Label TEST is serviced by no nodes and 1 cloud. Permissions or other restrictions provided by plugins may prevent this job from running on those nodes.

А если нод/агентов с такой меткой не найдено, то подсказочка:

There’s no agent/cloud that matches this assignment. Did you mean ‘TEST’ instead of ‘TEST2’?
echo 'hello world'

Теперь можно нажать Save и запустить конвейер - Build Now, а затем наблюдать за прогрессом.
Слева в меню появится выполняющееся задание. Можно нажать на него и выбрать Console Output, где будет видно yaml-декларация pod'а и в конце:

Building remotely on jenkins-agent-kdslp (TEST) in workspace /home/jenkins/agent/workspace/test2
[test2] $ /bin/sh -xe /tmp/jenkins5492002065026255241.sh
+ echo hello world
hello world
Finished: SUCCESS

Pipeline

Также можно протестировать работу пайплайна в проектах типа Pipeline. В этом случае конвейер описывается с помощью Jenkinsfile.

Декларативный стиль

pipeline {
   agent {
    node {
        label 'kube'
    }
   }

   stages {
      stage('Hello') {
         steps {
            echo 'Hello World'
         }
      }
   }
}

Тут важна строка с меткой:

label 'kube'

Эта же метка должна быть в настройках плагина Kubernetes - Pod TemplatesLabels.
Однако, можно переопределить параметры контейнера (containerTemplate), указав их в декларации:

pipeline {
   agent {
     kubernetes {
       label 'build-service-pod'
       containerTemplate {
         name 'jnlp'
         image 'jenkins/jnlp-slave:3.27-1'
         ttyEnabled true
        }
      }
    }

   stages {
      stage('Hello') {
         steps {
            echo 'Hello World'
         }
      }

Императивный стиль

Также можно протестировать скрипт в императивном стиле:

node('kube') {
  stage('test') { 
    echo 'Hello World'
  }
}

Тут важна строка с меткой:

node('kube')

Исходники приложения

Я буду тренироваться на тренировочном java-приложении - https://github.com/jenkins-docs/simple-java-maven-app
Нужно взять эти исходники и загрузить на доступный вам git-репозиторий. У меня развернут GitLab и в нем создан пустой проект, но можно обойтись и без сервера git, указывая в качестве адреса локальную папку.

git clone https://github.com/jenkins-docs/simple-java-maven-app
cd simple-java-maven-app/
git remote add autosys https://git.autosys.tk/username/simple-java-maven-app.git
git push -u autosys master

Затем нужно в GitLab сгенерировать для этого проекта Deploy Token (Settings → Repository → Deploy Tokens).

Создание Jenkins-файла