А АSunday, 1 April 2018

Тестовый полигон Docker с Zabbix и Jenkins, продолжение.

Всем привет.

Продолжим наши фокусы. Начало здесь.

5. Поднять контейнер с jenkins внутри
docker pull jenkins

Стартуем новый контейнер:
Внимание! В таком старте jenkins захватит консоль ssh. Два пути отсюда, либо с ключом -d демон либо stop/start из другой консоли

docker run --name myjenkins -p 8080:8080 jenkins
-OR-
docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v /home/user00:/var/jenkins_home jenkins

Первый вход в frontend jenkins:
http://IP_адрес_хоста:8080
Создаем пользователя для frontend jenkins.

Была проблема  с повторным входом в frontend jenkins.
Решение нашел такое:
Just change the "useSecurity" element to false in the /var/lib/jenkins/config.xml file. 
This way you will be able to login and reset the password if needed.
<useSecurity>false</useSecurity>
Однако после такой правки вход включился анонимный, который так и остался(.


6. После настройки jenkins создать джоб который при запуске будет ротировать логи zabbix:

Обычно это в General tab, в секции Build выбрать Execute shell.
Добавить скрипт:

ssh $UserName@$ServerName "bash sudo logrotate -f /etc/logrotate.conf"
-OR-
sudo logrotate -fv /etc/logrotate.conf
-OR-
    sshpass -p password ssh -t -t ${USERNAME}@${HOSTNAME} '(
        pwd
        ls -l
        sudo logrotate -fv /etc/logrotate.conf
    )'
Не забыть сказать что джоб с параметрами UserName и ServerName.
Однако я доставлял плагин "SSH plugin".
После в Config system, далее в разделе SSH remote hosts ввел инфу для SSH sites.
Тогда в секции Build можно выбрать Execute shell on remote host using ssh.
Тогда SSH site как user00@$IP_адрес_хоста:22
А Command как: sudo logrotate -fdv /etc/logrotate.conf
Однако джоб упадет ибо sudo ждет ввода пароля.

Для того чтобы не вводить пароль юзера в удаленном скрипте на хосте в
/etc/sudoers следует добавить by Visudo!
Defaults visiblepw
или
user00 ALL=(ALL) NOPASSWD: logrotate
...
Все равно на выходе получил FAILURE:
Started by user anonymous
Building in workspace /var/jenkins_home/my_test/sh
[SSH] script:
sudo logrotate -f /etc/logrotate.conf
[SSH] executing...
[SSH] completed
[SSH] exit-status: 1
Build step 'Execute shell script on remote host using ssh' marked build as failure
Finished: FAILURE

7. Настроить sftp доступ к логам zabbix /var/log/zabbix (readonly)

New group sftpusers и создали нового юзера user01.
id user01

Проведем небольшие изменения в доступах:
/etc/ssh/sshd_config
#Subsystem       sftp    /usr/lib64/misc/sftp-server
Subsystem      sftp    internal-sftp

Match User user01
        X11Forwarding no
        AllowTcpForwarding no
        AllowAgentForwarding no
        PermitTunnel no
        ForceCommand internal-sftp
        ChrootDirectory /var/log

>service sshd restart
Это все, конец.

Для справки получить IP-адреса всех запущенных контейнеров:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" $(docker ps -a -q)

docker01 172.17.0.1
mysql 172.17.0.2
zabbix-server 172.17.0.3
zabbix-web 172.17.0.4
myjenkins 172.17.0.5
zabbix-agent 172.31.1.100

В итоге задание считается выполненным когда:
+ есть доступ из мира по http\https на zabbix и jenkins 
- jenkins job корректно работает с логротейтом
+ в zabbix видны триггеры (проверка доступности всего поднятого), графики по ЦП, ОЗУ
+ есть доступ к логам по sftp 
- все стабильно работает и поднимается в том же состоянии после перезагрузки

Для первого раза для полного нуба в СI три пункта из пяти. Тем не менее было интересно и познавательно. Спасибо всем кто помогал советами, а Даниле отдельное спасибо за науку.

Увидимся.


1 comment:

Nyukers said...

Разное:

Как изменять файлы в контейнере?
>docker cp CONTAINER:FILEPATH LOCALFILENAME
>vi LOCALFILENAME
>docker cp LOCALFILENAME CONTAINER:FILEPATH
Если это конфиг то сервис(или контейнер) надо перестартовывать.
Но рестарт контейнера влечет за собой предыдущую версию конфига.

Автостарт контейнера.
Docker умеет самостоятельно перезапускать контейнеры в
случае их падения и даже запускать их во время старта системы.
Все, что для этого нужно?сделать, — просто использовать опцию —restart:
--restart=always
docker commit container-id new-image-name
docker run --name mysql-server --restart=always mysql-save

Где логи контейнера?
docker inspect --format='{{.LogPath}}' container

Вывод файла с номерами строк:
nl -ba file

Чей паблик ключ в профиле?
ssh-keyscan -t rsa 127.0.0.1

Избавиться от ввода password SSH?
PasswordAuthentication no
UsePAM no

Имя хоста:
hostname
hostnamectl

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное