Главная

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:

  1. Разное:

    Как изменять файлы в контейнере?
    >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

    ReplyDelete

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