Установка Jenkins

Jenkins бес­плат­ная про­грам­ма, поз­во­ля­ю­щая орга­ни­зо­вать про­цесс непре­рыв­ной инте­гра­ции (CI или Continuous Integration) и достав­ки (CD или Continuous Delivery) про­грамм­но­го про­дук­та (посто­ян­ное объ­еди­не­ние рабо­чих копий в основ­ную вет­ку раз­ра­бот­ки). Раз­ра­бо­та­на на Java и явля­ет­ся веб-при­ло­же­ни­ем. Для сво­ей рабо­ты тре­бу­ет веб-сер­вер Tomcat.

Ска­чать про­грам­му мож­но на офи­ци­аль­ном сай­те. Jenkins мож­но уста­но­вить на все попу­ляр­ные опе­ра­ци­он­ные систе­мы — Windows, Linux, Mac OS и дру­гие. Под­дер­жи­ва­ет­ся уста­нов­ка на саму систе­му или в виде кон­тей­не­ра Docker. В Linux так­же мож­но уста­но­вить из репо­зи­то­рия. Систем­ные тре­бо­ва­ния не высокие:

  1. JDK 1,5 или выше.
  2. От 256 Мб ОЗУ (реко­мен­ду­ет­ся от 2 Гб).
  3. Дис­ко­вое про­стран­ство, доста­точ­ное для хра­не­ние проектов.

Сре­ди ана­ло­гов мож­но отметить:

  • Bamboo.
  • GitLab CI/CD.
  • TeamCity
  • circleci.

Подготовка системы

Для кор­рект­ной рабо­ты Jenkins, мы выпол­ним настрой­ку бранд­мау­э­ра и отклю­чим SELinux.

Настройка firewalld

Под­клю­че­ние к пор­та­лу выпол­ня­ет­ся по пор­ту 8080 — необ­хо­ди­мо его открыть командой:

firewall-cmd --permanent --add-port=8080/tcp

И после пере­чи­тать правила:

firewall-cmd --reload

Отключение SELinux

Выпол­ня­ем 2 команды:

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Инсталляция Jenkins

Как было ска­за­но выше, мы уста­но­вим openjava, сер­вис Jenkins и завер­шим раз­вер­ты­ва­ния на пор­та­ле. Ито­го, 3 этапа.

1. Установка openjdk

Выпол­ня­ем команду:

yum install java-11-openjdk-devel

Выби­ра­ем дирек­то­рию для java по умол­ча­нию с помо­щью ути­ли­ты update-alternatives:

update-alternatives --config java

И на запрос:

  Selection    Command
-----------------------------------------------
*+ 1           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.9.11-0.el8_2.x86_64/bin/java)

… выби­ра­ем един­ствен­но пред­ло­жен­ный вариант:

Enter to keep the current selection[+], or type selection number: 1

* если в систе­ме уста­нов­ле­но несколь­ко вер­сий java, выби­ра­ем актуальную.

Гото­во. Смот­рим вер­сию уста­нов­лен­ной java:

java -version

Мы долж­ны уви­деть что-то на подобие:

openjdk version "11.0.9" 2020-10-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9+11-LTS, mixed mode, sharing)

2. Установка Jenkins

Для уста­нов­ки сер­ви­са Jenkins добав­ля­ем репозиторий:

wget -P /etc/yum.repos.d/ https://pkg.jenkins.io/redhat-stable/jenkins.repo

Импор­ти­ру­ем пуб­лич­ный ключ для под­клю­че­ния к репозиторию:

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

Уста­нав­ли­ва­ем jenkins:

yum install jenkins

Раз­ре­ша­ем авто­за­пуск и стар­ту­ем сервис:

systemctl enable jenkins

systemctl start jenkins

3. Завершение установки

Откры­ва­ем бра­у­зер и пере­хо­дим по адре­су http://<IP-адреса сер­ве­ра Jenkins>:8080 — откро­ет­ся окно «Unlock Jenkins». В нем будет путь до фай­ла, в кото­ром нуж­но взять пароль­ную фра­зу для раз­бло­ки­ров­ки портала:

И так, на сер­ве­ре вво­дим команду:

cat /var/lib/jenkins/secrets/initialAdminPassword

* где /var/lib/jenkins/secrets/initialAdminPassword — пол­ный путь до фай­ла, кото­рый отоб­ра­жен на стар­то­вой стра­ни­це установки.

Мы долж­ны уви­деть что-то на подобие:

# cat /var/lib/jenkins/secrets/initialAdminPassword
35635dce8b014707a2ec90937763cfe3

Исполь­зу­ем дан­ный пароль и встав­ля­ем его в поле Administrator password:

В сле­ду­ю­щем окне выби­ра­ем вари­ант уста­нов­ки пла­ги­нов — реко­мен­до­ван­ные или по выбору:

* если мы не слиш­ком хоро­шо зна­ко­мы с про­дук­том, выби­ра­ем реко­мен­до­ван­ные плагины.

Нач­нет­ся про­цесс раз­вер­ты­ва­ния Jenkins:

После созда­ем учет­ную запись для администратора:

На послед­ней стра­ни­це мы можем задать URL-адрес для наше­го пор­та­ла (или оста­вить IP-адрес):

Уста­нов­ка завершена.

Другие способы установки

Крат­ко, рас­смот­рим дру­гие мето­ды уста­нов­ки Jenkins.

1. Docker

агру­жа­ем кон­тей­не­ры для Jenkins:

docker pull jenkins/jenkins

Запус­ка­ем контейнер:

docker run -p 8080:8080 --name=jenkins-master jenkins/jenkins:latest

На экране мы долж­ны уви­деть код для раз­бло­ки­ров­ки Jenkins. Копи­ру­ем его, откры­ва­ем в бра­у­зе­ре стра­ни­цу http://<IP-адреса сер­ве­ра Jenkins>:8080 и выпол­ня­ем уста­нов­ку в веб, как это дела­ли выше.

После выпол­не­ния уста­нов­ки пре­ры­ва­ем рабо­ту кон­тей­не­ра в интер­ак­тив­ном режи­ме ком­би­на­ци­ей Ctrl + С и запус­ка­ем его в бэкграунде:

docker start jenkins-master

2. Установка из файла WAR

Загру­жа­ем послед­нюю вер­сию war-файла:

wget -P /usr/local/bin/ http://mirrors.jenkins-ci.org/war/latest/jenkins.war

* на стра­ни­це загруз­ки jenkins мож­но най­ти ссыл­ку для ска­чи­ва­ния LTS-вер­сии фай­ла war. Обра­ти­те вни­ма­ние, что мы сра­зу раз­ме­ща­ем файл в ката­ло­ге /usr/local/bin.

Запус­ка­ем war с помо­щью java:

java -jar /usr/local/bin/jenkins.war

На экране мы долж­ны уви­деть код для раз­бло­ки­ров­ки Jenkins. Копи­ру­ем его, откры­ва­ем в бра­у­зе­ре стра­ни­цу http://<IP-адреса сер­ве­ра Jenkins>:8080 и выпол­ня­ем уста­нов­ку в веб, как это дела­ли выше.

После выпол­не­ния уста­нов­ки пре­ры­ва­ем рабо­ту war в интер­ак­тив­ном режи­ме ком­би­на­ци­ей Ctrl + С.

Созда­ем юнит в systemd:

vi /usr/lib/systemd/system/jenkins.service

[codesyntax lang="php"]

[/codesyntax]

Пере­чи­ты­ва­ем юни­ты в systemcd:

systemctl daemon-reload

Раз­ре­ша­ем авто­за­пуск сер­ви­са jenkins и стар­ту­ем его:

systemctl enable jenkins --now

Мож­но про­ве­рить состо­я­ние запу­щен­ной служ­бы командой:

systemctl status jenkins

Работа с Jenkins в CLI

По умол­ча­нию, необ­хо­ди­мый для рабо­ты с Jenkins из команд­ной стро­ки файл jenkins-cli.jar не копи­ру­ет­ся в систему.

Его нуж­но ска­чать. Выполняем:

wget http://127.0.0.1:8080/jnlpJars/jenkins-cli.jar -P /usr/local/bin/

* таким обра­зом, мы ска­ча­ем файл с соб­ствен­но­го сер­ве­ра и раз­ме­стим его в пап­ке /usr/local/bin/.

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

java -jar /usr/local/bin/jenkins-cli.jar -auth <имя пользователя>:<пароль> -s http://127.0.0.1:8080/ <выпол­ня­е­мые коман­ды и опции>

Напри­мер, полу­чить спи­сок команд мож­но так:

java -jar /usr/local/bin/jenkins-cli.jar -auth admin:admin -s http://127.0.0.1:8080/ -webSocket help

* где admin:admin — логин и пароль от адми­ни­стра­тив­ной учет­ной записи.

Установка плагинов

Спи­сок пла­ги­нов мы можем най­ти на офи­ци­аль­ном сай­те. Мы рас­смот­рим 2 спо­со­ба их уста­нов­ки — из веб-интер­фей­са и команд­ной строки.

Веб-интерфейс

Пере­хо­дим в раз­дел Настро­ить Jenkins:

Затем в Управ­ле­ние пла­ги­на­ми:

Пере­хо­дим к вклад­ке Доступ­ные, по филь­тру нахо­дим нуж­ный нам пла­гин, отме­ча­ем галоч­кой его установку:

Кли­ка­ем по кноп­ке Загру­зить и уста­но­вить после пере­за­груз­ки:

Будет выпол­не­на уста­нов­ке пла­ги­на, после чего, пор­тал пере­за­пу­стит сервис.

CLI

В команд­ной стро­ке для уста­нов­ки пла­ги­на выполняем:

java -jar /usr/local/bin/jenkins-cli.jar -auth admin:admin -s http://127.0.0.1:8080/ install-plugin docker-workflow

* в дан­ном при­ме­ре мы уста­но­вим пла­гин Docker Pipeline. Обра­ти­те вни­ма­ние, что его иден­ти­фи­ка­тор для уста­нов­ки docker-workflow — посмот­реть дан­ный иден­ти­фи­ка­тор мож­но на сай­те с пла­ги­на­ми.

После пере­за­пус­ка­ем сер­вис jenkins:

systemctl restart jenkins

Пла­гин установлен.

Возможные ошибки

Public key for jenkins is not installed

В про­цес­се уста­нов­ки мы можем полу­чить сооб­ще­ние на подобие:

warning: /var/cache/dnf/jenkins-0919f06c02b07800/packages/jenkins-2.249.3-1.1.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 45f2c3d5: NOKEY
Public key for jenkins-2.249.3-1.1.noarch.rpm is not installed
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'yum clean packages'.

При­чи­на: не импор­ти­ро­ван пуб­лич­ный ключ. По умол­ча­нию, репо­зи­то­рий тре­бу­ет про­вер­ку gpg.

Реше­ние: про­бле­ма может быть реше­на 2-я способами.

1. Импор­ти­ро­вать пуб­лич­ный ключ для репо­зи­то­рия jenkins. Для это­го выпол­ня­ем команду:

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

2. Отклю­ча­ем про­вер­ку gpg. Для это­го откро­ем настрой­ки для репозитория:

vi /etc/yum.repos.d/jenkins.repo

Редак­ти­ру­ем строку:

gpgcheck=0

Error: Unable to access jarfile jenkins-cli.jar

Ошиб­ка появ­ля­ет­ся при попыт­ке выпол­нить коман­ду в jenkins-cli.

При­чи­на: для рабо­ты коман­ды необ­хо­дим файл jenkins-cli.jar, кото­рый не уста­нав­ли­ва­ет­ся в системе.

Реше­ние: выпол­ня­ем дей­ствия по настрой­ке систе­мы для рабо­ты с jenkins-cli.

failed to start lsb: start jenkins at boot time

Ошиб­ка воз­ни­ка­ем при попыт­ке запу­стить сер­вис jenkins.

При­чи­на: как пра­ви­ло, отсут­ствие в систе­ме уста­нов­лен­но­го java.

Реше­ние: уста­нав­ли­ва­ем java по инструк­ции выше.