Jenkins + systemd + firewalld

CentOS7にJenkinsを入れようとしたけど、systemd+firewalldをどうやって設定するんだろうと思ったので。

ちゃんと公式に書いてありました。
Installing Jenkins as a Unix daemon - Jenkins - Jenkins Wiki

実際はfirewalldの設定も必要なので、合わせて。

環境

  • Java(Hotspot VM 1.8)
    • Home: /usr/local/jdk
  • jenkins
    • User: jenkins
    • Home: /home/jenkins
    • War: /home/jenkins/jenkins.war

firewalld

まずはfirewallの設定から。

httpをベースにすればいいかなーと /usr/lib/firewalld/services/http.xml をコピペして作る・・・というほどでもなくて、これだけ書く。
[service名].xmlで作ることと、<port protocol="tcp" port="8080"/> を書いておけばよい感じ。

習慣的にservice名を合わせてるけど、firewalldとsystemdが内部で連携してくれるのかはよくわからない。
descriptionはよくわからない。

sudo tee /etc/firewalld/services/jenkins.xml << '__EOF__'
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Jenkins</short>
  <description>Jenkins(HTTP)</description>
  <port protocol="tcp" port="8080"/>
</service>
__EOF__

あとはfirewalldにこのserviceのポートを開けてもらうようにお願いする。

sudo firewall-cmd --add-service=jenkins --zone=public --permanent
sudo firewall-cmd --reload
# 確認
sudo firewall-cmd --list-services --zone=public

確認で jenkins の文字が含まれていればOK。

systemd

公式から持ってくる。環境設定分を適当に置き換える。

sudo tee /etc/systemd/system/jenkins.service << '__EOF__'
[Unit]
Description=Jenkins Daemon

[Service]
ExecStart=/usr/local/jdk/bin/java -jar /home/jenkins/jenkins.war
User=jenkins

[Install]
WantedBy=multi-user.target
__EOF__

あとはsystemctlで自動起動設定をして起動するだけ。

sudo systemctl enable jenkins.service
sudo systemctl start jenkins.service
# 確認
sudo systemctl status jenkins.service

あとはrebootしても勝手に起動することを確認すればよろし。