При разработке одного небольшого сервиса захотелось уже наконец устроить CI в этой дыре и запускать тесты после каждого локального коммита.

Понятно, что во избежание велосипедостроения нужно использовать Jenkins. При этом, чтобы не настраивать странные доступы к домашнему каталогу, Jenkins нужно запускать от собственного пользователя. Вдобавок лично меня раздражает держать терминал с запущенным скриптом типа ~/bin/start_jenkins.sh и тем более хранить командную строку с нужными ключами в .bash_history.

Решение проблемы даёт пользовательский systemd. Коротко о решении. Всё, связанное с jenkins, храним в каталоге ~/jenkins. Пакеты дистрибутива не используем, берём последний .war прямо с официального сайта. Настраиваем автозапуск Jenkins, поэтому слишком популярный порт 8080 заменяем на 8081.

Реализация всего вышесказанного укладывается в одну небольшую копипасту.

mkdir ~/jenkins
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war -O - > ~/jenkins/jenkins.war
mkdir -p ~/.config/systemd/user
cat <<EOF > ~/.config/systemd/user/jenkins.service
[Unit]
Description=Jenkins CI server
After=network.target

[Service]
ExecStart=/usr/bin/java -Djava.awt.headless=true -DJENKINS_HOME=$HOME/jenkins -jar $HOME/jenkins/jenkins.war --logfile=$HOME/jenkins/jenkins.log --webroot=$HOME/jenkins/war --httpPort=8081 --httpListenAddress=127.0.0.1

[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable jenkins
systemctl --user start jenkins

В итоге «домашний» Jenkins всегда будет доступен по адресу http://localhost:8081.


Comments

comments powered by Disqus