Автоматизация сборки 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).