Имеется две EC2, на одной будет запущен Jenkins, который будет мастером, второй EC2 надо настроить и подключить как slave для Jenkins.
Для этого – на второй машине потребуется Java, настроенная SSH авторизация по ключам, и отдельный пользователь.
На Jenkins потребуется SSH Slaves Plugin.
Начинаем со слейва.
Содержание
Настройка Jenkins Unix slave
Установка Java
Подключаемся на слейв, устанавливаем Java. Тут Ubuntu, поэтому apt
:
[simterm]
root@ip-172-31-10-88:~# apt update
root@ip-172-31-10-88:~# apt install openjdk-8-jdk
[/simterm]
Проверяем:
[simterm]
ubuntu@ip-172-31-10-88:~$ java -version
openjdk version “1.8.0_162”
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)
[/simterm]
Добавление пользователя
Создаём пользователя, под которым будет подключаться Jenkins:
[simterm]
root@ip-172-31-10-88:~# useradd jenkins
[/simterm]
Настройка Master
Установка Docker
Переключаемся на мастер, устанавливаем Docker:
[simterm]
root@ip-172-31-5-212:~# curl https://get.docker.com/ | bash
[/simterm]
И Docker Compose:
[simterm]
root@ip-172-31-5-212:/home/jenkins# curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
root@ip-172-31-5-212:~# chmod +x /usr/local/bin/docker-compose
[/simterm]
Проверяем docker
:
[simterm]
root@ip-172-31-5-212:~# docker run hello-world
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
…
[/simterm]
И Compose:
[simterm]
root@ip-172-31-5-212:~# docker-compose –version
docker-compose version 1.21.0, build 5920eb0
[/simterm]
Создание пользователя
Создаём каталог для $JENKINS_HOME
и $HOME
для пользователя (/home/jenkins
для RSA ключей, в /jenkins
будут данные самого Jenkins):
[simterm]
root@ip-172-31-5-212:~# mkdir /jenkins
root@ip-172-31-5-212:~# mkdir /home/jenkins
[/simterm]
Создаём группу с GID 20000, что бы избежать проблем с правами в контейнере и на хосте (запускать будем от пользователя jenkins
, у него на хосте UID 1001, в контейнере пользователь с UID 1000, а UID 1000 на хосте – пользователь ubuntu
):
[simterm]
root@ip-172-31-5-212:~# groupadd –gid 20000 jenkins
[/simterm]
Добавляем пользователя:
[simterm]
root@ip-172-31-5-212:~# useradd -d /home/jenkins –uid 20000 –gid 20000 -s /bin/bash jenkins
[/simterm]
Добавляем его в группу docker
:
[simterm]
root@ip-172-31-5-212:~# usermod -aG docker jenkins
[/simterm]
Меняем владельца каталогов:
[simterm]
root@ip-172-31-5-212:~# chown jenkins:jenkins /jenkins/
root@ip-172-31-5-212:~# chown jenkins:jenkins /home/jenkins/
[/simterm]
Настройка SSH
Переключаемся на пользователя jenkins
, создаём ключ:
[simterm]
jenkins@ip-172-31-5-212:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jenkins/.ssh/id_rsa):
…
[/simterm]
Т.к. это EC2, и парольная авторизация отключена – то быстрее будет просто руками скопировать ключ, чем использовать ssh-copy-id
:
[simterm]
jenkins@ip-172-31-5-212:~$ cat .ssh/id_rsa.pub
ssh-rsa AAA***ZmSt jenkins@ip-172-31-5-212
[/simterm]
Добавляем его в /home/jenkins/.ssh/authorized_keys
на слейве.
Проверяем SSH с мастера:
[simterm]
jenkins@ip-172-31-5-212:~$ ssh [email protected] -i .ssh/id_rsa
The authenticity of host ‘34.253.207.173 (34.253.207.173)’ can’t be established.
ECDSA key fingerprint is SHA256:830kEWjBvWnsgF8TdWJHQSKrEiOYK8+V98a0dbGPLYU.
Are you sure you want to continue connecting (yes/no)? yes
…
Last login: Tue May 8 09:18:28 2018 from 34.245.18.136
jenkins@ip-172-31-10-88:~$
[/simterm]
ОК, тут всё работает.
Запуск Jenkins
На мастере переключаемся на пользователя jenkins
:
[simterm]
root@ip-172-31-5-212:/home/jenkins# su -l jenkins
[/simterm]
Создаём Compose файл:
version: '3' services: jenkins: image: jenkins/jenkins:lts user: "20000:20000" ports: - "5000:5000" - "8080:8080" volumes: - /jenkins:/var/jenkins_home
Запускаем Jenkins:
[simterm]
jenkins@ip-172-31-5-212:~$ docker-compose -f jenkins-compose.json up
Creating jenkins_jenkins_1 … done
…
[/simterm]
Из лога запуска получаем пароль, заходим на Jenkins, активируем:
Создаём администратора:
Добавление Jenkins Slave
Проверяем наличие плагина SSH Slaves Plugin:
Переходим в Manage Jenkins > Manage Nodes:
Сейчас тут только один хост – сам мастер:
Кликаем New node:
Создаём новый слейв:
- Remote root directory: указываем
/home/jenkins
- Launch method: launch slave agents via ssh
- Host – указываем IP хоста со слейвом
- Credentials – кликаем Add, в Kind выбираем SSH username with private key и указываем ключ вручную (что бы не мапить
/home/jenkins/.ssh
с хоста в контейнер с Jenkins).
Копируем содержимое /home/jenkins/.ssh/id_rsa
, и вставляем в Private Key:
В Host Key Verification Strategy можно использовать Manually trusted, результат:
Жмём Save, переходим к агенту, слева жмём Trust SSH Host Key:
Готово:
Ссылки по теме
How to run Jenkins with docker?
Add linux slave node in the Jenkins
How to Connect to Remote SSH Slaves?
Host Key Verification for SSH Agents