Автоматизация сборки Java-приложения с помощью 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
При использовании типа 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. В этом случае конвейер описывается с помощью Jenkinsfile.
pipeline { agent { node { label 'kube' } } stages { stage('Hello') { steps { echo 'Hello World' } } } }
Тут важна строка с меткой:
label 'kube'
Эта же метка должна быть в настройках плагина Kubernetes - Pod Templates → Labels.
Однако, можно переопределить параметры контейнера (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).