В данной статье рассмотрим настройку Jenkins-агента(slave) на основе динамического создания(и удаления) Amazon EC2-инстанса
В AWS-консоли
В IAM-вкладке
1.Создать группу jenkins,присодинить к этой группе роль AmazonEC2FullAccess
2.Создать пользователя jenkins(тип c Access/Secret key), включить его в группу Jenkins,сохранить Access/Secret ключи
3.В EC2-вкладке
Создать пару SSH-ключей и сохранить pem-файл. Важно помнить, в каком регионе была создана пара SSH-ключей, этот же регион необходимо выбрать при настройке AWS EC2-плагина в Jenkins(см.пункт 6)(например, us-east-1 – N.Virginia)
В Jenkins
4.В Jenkins установить плагин Amazon EC2
5. В Jenkins добавить новый Credentials с типом AWS Credentials и указать в нем Access и Secret ключи
6.Настройка AWS EC2 Jenkins slave в настройках Jenkins
1 2 3 4 5 6 |
Jenkins->Configure Jenkins->System configurstion->Add new cloud->Amazon EC2 Name->aws-jenkins(произвольное имя) Amazon EC2 credentials->выбираем credentials, созданный на шаге 5 Region->выбираем регион, в котором будет запущен EC2-инстанс для Jenkins Slave(для которого создавали SSH-ключи на шаге 3)(например, us-east-1 – N.Virginia) EC2 Key Pair's Private Key->вставлям содержимое приватного ключа, загруженного в пункте 3 |
Проверяем доступ c Jenkins в AWS путем нажатия кнопки Test Connections
Далее добавляем AMI образ,из которого будет запущен EC2-инстанс, нажимая кнопку Добавить
Указываем идентификатор образа, из которого нужно развернуть инстанс.
Такой AMI может быть заранее подготовлен и включать в себя уже все установленное и необходимое для корректного выполнения сборки программное обеспечение, пакеты, утилиты и т.д.
В данном примере используем AMI-образ, имеющийся в AWS стандартной Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
1 2 3 4 5 6 7 8 9 10 |
Instance Type->желаемый тип инстанса Security group – группа безопасности, в которой разрешено входящее подключение по SSH RemoteFS root ->/home/ubuntu корень файловой системы в инстансе для jenkins будет домашний каталог пользователя ubuntu Remote user->ubuntu Пользователь, под которым происходит подключение к EC2-инстансу с Jenkins-сервера Root command prefix->sudo Для команд, требующих повышения привиллегий до root-пользователя использовать sudo Remote SSH port->22 Порт, на котором запущен SSH-сервер в инстансе. |
1 2 3 4 5 6 7 8 9 10 |
Label->aws-jenkins-slave-1 Метка, которая будет использоваться в pipeline, для указания Jenkins Slave, на котором необходимо выполнить сборку Usage->Only build jobs with label expressions matching this node Этот Jenkins Slave использовать только для сборки джобы, которые имеют совпадающую метку с меткой этого jenkins slave Idle termination->5 Удалять(можно настроить, чтобы, например, только останавливать) динамически созданный EC2-инстанс после 5 минут нахождения инстанса в состояния бездействия/простоя Init script->команды, которые необходимо выполнять при создании инстанса Например, установим необходимые пакеты для выполнения джобы – java,git Numbers of executors->1 Количество одновременных сборок |
Создадим Pipeline, который будет выполняться на Jenkins Slave, созданным автоматически на AWS EC2-инстансе
В pipeline проверим наличие установленных java и git(как результат корректной работы init script на предыдущем шаге)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pipeline { agent { label 'aws-jenkins-slave-1' } stages { stage("Check") { steps { sh "echo $JAVA_HOME" sh "java -version" sh "git --version" } } } } |
Выполним сборку и проверим корректность работы
a)Наличие инамически созданного EC2-инстанса
b)корректную отработку Init script
c)корректную отработку сборки в целом
Источник: https://www.packtpub.com/networking-and-servers/practical-jenkins-video