Имеется Jenkins, запущен в Docker-контейнере.
Содержание
Проблема
После рестарта через systemctl
— «Шеф, усё пропало!»
Сам сервис выглядит так:
[simterm]
root@jenkins-production:/opt/jenkins# systemctl cat jenkins # /etc/systemd/system/jenkins.service [Unit] Description=Jenkins service Requires=docker.service After=docker.service [Service] Restart=always WorkingDirectory=/opt/jenkins # Compose up ExecStart=/usr/local/bin/docker-compose -f jenkins-compose.yml up # Compose down, remove containers and volumes ExecStop=/usr/local/bin/docker-compose -f jenkins-compose.yml down -v [Install] WantedBy=multi-user.target
[/simterm]
И Compose файл:
[simterm]
root@jenkins-production:/opt/jenkins# cat /opt/jenkins/jenkins-compose.yml version: '3' networks: jenkins: services: jenkins: # user: jenkins user: root image: jenkins/jenkins:lts # restart: always networks: - jenkins ports: - '8080:8080' - '50000:50000' volumes: - /data/jenkins:/var/lib/jenkins - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 environment: - JENKINS_HOME=/var/lib/jenkins - JAVA_OPTS=-Duser.timezone=Europe/Kiev logging: driver: "journald"
[/simterm]
Первым, что заметил — перестала работать авторизация, постоянно писало Login failed.
Далее в логах контейнера — сообщения вида:
Mar 15, 2019 4:31:03 PM org.jenkinsci.plugins.ghprb.GhprbRepository createHook
SEVERE: Could not create web hook for repository project-dev/project-iOS. Does the user (from global configuration) have admin rights to the repository?
Пятница.
Вечер.
CI лежит, вся работа всех девелоперов — стоит.
Жопа(
Окей…
Утром делал апгрейд — наверно, что-то поломалось…
Подключаю диск с бекапом, монтирую его в контейнер вместо нынешнего — нет… Та же ерунда…
Потом обратил внимание на сообщения вида:
INFO: Migrating build records in /var/lib/jenkins/jobs/iOS Project/jobs/Unit Test/builds
Mar 15, 2019 4:31:05 PM jenkins.model.RunIdMigrator doMigrate
WARNING: found unexpected dir lastSuccessfulBuild
Что за миграции?
Откуда?
Причины
И тут до меня начало доходить — дело в версии самого Jenkins. С плагинами, которые в бекапах и на «боевом» диске — всё нормально.
Итак: Jenkins обновлялся через его UI, т.е. — в запущенном контейнере.
А под вечер — я сделал рестарт через:
[simterm]
root@jenkins-production:/opt/jenkins# systemctl restart jenkins
[/simterm]
И что произошло?
А произошло то, что подтянулся Docker-образ с хоста, в котором лежала совсем древняя версия, т.к. образ я не обновлял уже несколько месяцев.
Решение
А потому — делаем:
[simterm]
root@jenkins-production:/opt/jenkins# docker-compose -f jenkins-compose.yml pull
[/simterm]
Перезапускаем контейнер ещё раз — и всё заработало.
Выводы
Вывод?
Надо или автоматизировать обновление образа, или добавить какую-то нотификацию о том, что доступна новая версия jenkins/jenkins:lts, или использовать не jenkins/jenkins:lts, а использовать конкретный тег, например — 2.164.1.
В общем — «Пятница удалась» (с) 🙂