Skip to content

Jenkins#

モチベーション#

  • サイトの更新作業をJenkinsさんにお願いしてラクする。

構成#

CentOS7ベース

uml diagram

構成

  • bash
  • firewalld
  • ssh
  • httpd
  • git
  • docker
  • jbake
  • jenkins

手順#

  • ホストにhttpdインストールと起動
  • ホストにdockerインストールとdockerサービス起動
  • ホストにgitインストール
  • ホストにjbakeのインストール
  • ホストにdockerのjenkinsイメージをpullしてコンテナ起動
  • httpdでリバースプロキシ設定
  • firewalldで80のポート開ける
  • コンテナのJenkinsのスレーブとしてホストを登録
  • jenkinsでサイトのビルド・デプロイ用のJobを作る

ホストにhttpdインストールと起動#

yum install -y httpd
systemctl enable httpd
systemctl start httpd
systemctl status httpd

ホストにdockerインストールとdockerサービス起動#

yum install -y docker
systemctl start docker
systemctl enable docker
systemctl status docker

ホストにgitインストール#

yum install -y git

ホストにjbakeのインストール#

useradd hogehogeslave
passwd hogehogeslave
su - hogehogeslave
yum install java-1.8.0-openjdk
curl -s "https://get.sdkman.io" | bash
source "/home/hogehogeslave/.sdkman/bin/sdkman-init.sh"
sdk i jbake
sdk i java
sdk c

jenkinsのスレーブ用のユーザを作成して、その環境にインストールする。 sdkコマンドを有効にするためには、再ログインが必要 OracleJDKのほうがよければ、sdk i javaでインストール sdk cでインストールされていることを確認

ホストにdockerのjenkinsイメージをpullしてコンテナ起動#

docker pull jenkins
docker run -d --name jenkinssan -p 8080:8080 -p 50000:50000 jenkins --prefix=/jenkins
docker logs jenkinssan

Jenkinsは初回ログインするときにパスワードが必要。 ログに以下のバスワードが表示される。

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

httpdでリバースプロキシ設定#

ProxyPass /jenkins http://localhost:8080/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8080/jenkins
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://localhost:8080/jenkins*>
  Order deny,allow
  Allow from all
</Proxy>

https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Apache

firewalldで80のポート開ける#

yum install -y firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --reload

コンテナのJenkinsのスレーブとしてホストを登録#

「Jenkinsの管理」ー>「ノードの管理」ー>「新規ノード作成」

起動方法を「SSH経由でUnixマシンのスレーブエージェントを起動」で接続 dockerのホストの内部アドレスで接続 host側で

ip a

実行し、docker0が持っているIPアドレスで接続。この環境は、172.17.0.1。 Jenkins経由ではなく、手動で接続確認する場合は、以下で確認。

docker exec -it jenkinssan /bin/bash
ssh -l hogehogeslave 172.17.0.1

jenkinsでサイトのビルド・デプロイ用のJobを作る#

「新たしいジョブ作成」ー>「フリースタイルのプロジェクト」 実行するノードを制限:スレーブのラベル名 ソースコード管理:Git ビルド・トリガ:GitHub hook trigger for GITScm polling ビルド:シェルの実行を追加

ls assets/img | grep .uml$ | xargs -Ixxx plantuml xxx
source "/home/hogehogeslave/.sdkman/bin/sdkman-init.sh"
jbake -b . /var/www/hogehogesite

plantumlで作成しているファイルを画像に変換。 sdkman関連のコマンドを有効化するため、sdkman-init.shを実行する。 出力先のディレクトリに書き込み権限がないと失敗するので、設定する。

ビルドトリガとして、githubにpushしたタイミングでビルドが動くように、github側の設定で、 「Settings」ー>「integrated&Service」ー>「Jenkins(GitHub Plugin)」 で、対向のJenkinsのURLを設定する。