Jenkins初心者なので、間違えてたり、変な事してたらごめんよ(´・ω・`)
公式サイトのダウンロードページに、レポジトリを利用した導入手順が公開されているので、手順に従いインストールを行う。
# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
# yum install jenkins -y
既定でポート "8080" を使用するので、必要に応じて設定を変更する。
# vi /etc/sysconfig/jenkins
...
JENKINS_PORT="8008"
既定ではinitスクリプトが置かれるので、Wikiの情報を元に"systemd"の設定ファイルを作成する。
# chmod -x /etc/init.d/jenkins
# vi /etc/systemd/system/jenkins.service
以下、"jenkins.service" に記述した内容
[Unit]
Description=Jenkins Daemon
[Service]
ExecStart=/usr/bin/java -jar /usr/lib/jenkins/jenkins.war
User=jenkins
[Install]
WantedBy=multi-user.target
上記ファイルの設置後、systemdをリロードして、起動を確認した後、自動起動を有効にする。
# systemctl daemon-reload
# systemctl start jenkins
任意の端末でブラウザを起動し http://[IPADDRESS]:8080/ へアクセス、Jenkinsおじさんが見れる事を確認した後、自動起動を有効にする。
# systemctl enable jenkins
以前調べた事があるのと同様の手順で、"mockbuild" ユーザを追加する手順で対応
# yum install rpmdevtools @development -y
# useradd mockbuild && passwd mockbuild
# su - mockbuild
$ rpmdev-setuptree
こちらの設定例を参考に、テストで Apache 2.4.18 の設定を入れてみた。実行は上記で作成した "mockbuild" ユーザを想定
$ cd ~
$ pwd
/home/mockbuild
$ mkdir jenkins_jobs
$ vi ./jenkins_jobs/apache.sh
"apache.sh" の内容、"#!/bin/bash -xe" については こちらを参考にした。
#!/bin/bash -xe
topdir="${WORKSPACE}/rpmbuild"
rpmdir="${topdir}/RPMS/$(uname -m)"
echo -e "%_topdir ${topdir}\n%_sourcedir %{_topdir}/SOURCES/%{name}-%{version}-%{release}.src" > "${HOME}/.rpmmacros"
cd ${topdir}/SOURCES
case "${TARGET}" in
*/httpd-2.4.18.tar.bz2)
tarball="${TARGET##*/}"
module="${tarball%.tar.*}"
curl -O "${TARGET}"
tar jxf "${tarball}"
sed -e 's,%{epoch}:,,g' -i "${module}/httpd.spec"
tar jcf "${tarball}" "${module}"
rpmbuild -tb "${tarball}"
;;
*.src.rpm)
curl -O "${TARGET}" && rpmbuild --rebuild "${TARGET##*/}"
;;
*.tar.bz2)
curl -O "${TARGET}" && rpmbuild -tb "${TARGET##*/}"
;;
*)
echo 'environment variable TARGET must be set.'
exit 1
;;
esac
exit $RETVAL
作成した "apache.sh" に実行権限を付与し、"mocubuild"ユーザを抜ける。
$ chmod +x ./jenkins_jobs/apache.sh
$ exit
上記と同様にこちらを参考にし、"jenkins"ユーザがスクリプトを実行出来るようにする。
# visudo
...
#Defaults requiretty
Defaults:jenkins !requiretty
...
## 末尾に追記!
jenkins ALL=mockbuild NOPASSWD:SETENV: /home/mockbuild/jenkins_jobs/apache.sh
必要に応じて説明を入力
ビルドのパラメータ化にチェックを入れる
ビルド
ビルド手順の追加 - シェルの実行 を選択
下記シェルスクリプトの設定を入力
export WORKSPACE=/home/mockbuild
sudo -E -u mockbuild /home/mockbuild/jenkins_jobs/apache.sh
保存
ここで手動でジョブを実行してみる(パラメータ付きビルド実行)・・・で、見事に失敗(´・ω・`)ジョブのコンソール出力を見たら、sudo で失敗したっぽい。 で、/var/log/secure を見たら・・・
# tail /var/log/secure
...
sudo: pam_succeed_if(sudo:auth): requirement "uid >= 1000" not met by user "jenkins"
# id -a jenkins
uid=996(jenkins) gid=994(jenkins) groups=994(jenkins)
んごぉ!! う、う〜ん。。。
少し調べてみて"SSH Plugin"使おうか・・・とも考えたけど、もう面倒になったので一旦Jenkinsを止めて、適当に空いてるUIDへ変更・・・
# systemctl stop jenkins
# groupmod -g 1002 jenkins
# usermod -u 1002 jenkins
旧UID/GIDが利用しているファイル/ディレクトリを検索・・・
# find / -user 996 -print
# find / -group 994 -print
大体 /var 下だったので修正した。
# find /var -user 996 -print | xargs -t chown jenkins
# find /var -group 994 -print | xargs -t chgrp jenkins
で、Jenkins再起動
# systemctl start jenkins
一回失敗してダメだったので、今度は手動でのスクリプト実行でテストしてからにする。
"jenkins"ユーザでシェルを使えるようにする。
# chsh jenkins
jenkins のシェルを変更します。
新しいシェル [/bin/false]: /bin/bash
シェルを変更しました。
Jenkinsでジョブを実行するときと同様に環境変数を設定し、スクリプトを実行する。
# su - jenkins
$ export export WORKSPACE=/home/mockbuild
$ export TARGET=http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.5.2.tar.bz2
$ sudo -E -u mockbuild /home/mockbuild/jenkins_jobs/apache.sh
繰り返し何度か試験を行い、問題がなければjenkins側での実行などの対応を進める。シェルスクリプトの内容ももっとなんとかしたいし、最新のバージョンを拾って勝手にRPM作るとこまで試したいし、まだまだ色々ある。。
めんどくさかった。。
以上