昨日に引き続くメモ。
Qiita - インターネット非接続環境のCentOS 7にJenkinsとGitLabをインストール
https://qiita.com/rk05231977/items/791490f5532baf749924
インターネット非接続環境のJenkinsとGitLab環境を作ったので、GitLabでファイルを更新したらそれをトリガーにJenkinsでJobを実行しようと、そういう記事。
##■ホストOSの準備
sshで昨日作ったCentOSサーバーにrootでログイン。
1.以下のコマンドを実行して、jenkinsユーザーがdockerコマンドを実行可能にする。
# groupmems -a jenkins -g docker
# systemctl restart jenkins
2.gitコマンドを導入する。
# yum install -y git
3.「devops.example.com」が自マシンのIPアドレスで解決されるように設定する。
# echo "192.168.0.116 devops.example.com" >> /etc/hosts
##■Jenkins側
以前はCSRF Protectionとかの設定を修正する必要があったのだが、今は必要なくなったらしい。簡単になるのは良いことだ。
###・ジョブを作る
1.Webブラウザで先に作ったCentOSサーバーのJenkinsにアクセス、adminユーザーでログインする。
http://devops.example.com:8080/
2.ダッシュボード画面、または http://devops.example.com:8080/manage の管理画面から「New item」をクリックする。
3.「Enter an item name」の画面でジョブ名を入力し(ここではSample)、「Freestyle project」を選択して、「OK」。
4.「Build」>「Add build step」>「Execute shell」をクリックし、「Command」に実行したいコマンドを入力。とりあえず、GitLabからgit cloneしてビルド番号のタグを付けたDockerイメージをビルドする以下を入力。
if [ -e project ]; then
rm -rf project
fi
git clone http://devops.example.com/root/project.git
cd project
docker build . -t project:$BUILD_NUMBER
5.画面下の「Save」をクリック。
###・APIトークンを作成
1.Jenkins画面右上のユーザー名(admin)をクリック。
2.画面左メニューの「Configure」をクリック。
3.「APIトークン」の「Add new token」をクリック。
4.「Generate」をクリック。
5.作成されたトークン文字列(「111cc9183125ea9e099c754b059564c4fd」みたいな)、をコピペして退避。
6.一応、画面下の「Save」をクリック。
##■GitLab側
###・セキュリティ設定
1.WebブラウザでGitLabにアクセスし、rootユーザーでログインする。
http://devops.example.com/
2.画面上方のスパナのアイコン、「Admin Area」をクリック。
3.画面左メニュー下方の「Settings」>「Network」をクリック。
4.「Outbound requests」右の「Expand」をクリック。
5.「Allow requests to the local network from web hooks and services」をチェック。
6.「Save changes」をクリック。
###・プロジェクトを作る
1.画面上側中央の「+」ボタンから「New project」をクリック。
2.「Create new project」画面で「Create blank project」をクリック。
3.次の画面で、「Project name」に「project」と入力。
また、「Visibility Level」に「public」を選択。
4.画面下の「Create project」をクリック。
5.プロジェクトが出来たら、「New file」(画面の真ん中ら辺り、Cloneの隣)をクリック。
次の画面で、もう一回「New file」をクリック。
6.「Create new file」の画面で「Name」に「Dockerfile」と入力し、「Create file」をクリック。
7.テキストに以下を入力。作成するDockerイメージは適当なもの。
FROM gitlab/gitlab-ce:13.7.3-ce.0
COPY hello.txt /
8.画面下側の「Commit...」>「Commit」をクリック。
###・Jenkins連携を追加
1.Web IDEを閉じてProject管理画面に戻る。画面左上の「project」のアイコンをクリックする。
2.左メニュー下方、「Settings」>「Webhooks」を開く。
3.URLに、先に作成したJenkinsジョブのURLを入力。ユーザー名とAPIトークンも付ける。
http://admin:111cc9183125ea9e099c754b059564c4fd@192.168.0.116:8080/job/Sample/build
["http://][Jenkinsユーザー名]:[APIトークン]@[CentOSホストのIPアドレス:ポート番号]/job/[job名]/build
「192.168.0.116」の部分は、ホストOSのIPアドレスを指定。GitLabがDockerコンテナ上で動作している問題で、localhostとかは指定不可。
3.Triggerはそのまま、「Enable SSL Verification」からはチェックを外す。
4.「Add webhook」をクリック。
5.画面下に現れた「Project Hooks (1)」の「Test」>「Push event」を実行し、Webhookを飛ばしてJenkinsのJobが実行できることを確認する(「Hook executed successfully: HTTP 201」と青色のメッセージが画面の上の方に表示される)。なお、この時点ではJenkins側Jobは必要なファイルがGitLabプロジェクト上にないため失敗する。
###・GitLabにファイルをコミットしてビルド
1.画面左上の「project」をクリックして、プロジェクト画面を開く。
2.画面中央、プロジェクト名の右の「+」>「New file」をクリック。
3.「File name」に「hello.txt」を入力。
4.テキストに「hello」とか、適当な文字列を入力。
5.画面下の「Commit changes」をクリック。
設定が上手くいけば、「Commit changes」をクリックしたタイミングで、Jenkins上の「Sample」ジョブが起動しているはず。
Jenkinsのダッシュボード画面、「Build History」から最新のビルドを確認し、「Console Output」を確認すれば以下のようなメッセージが出力され、「project:<ビルド番号>」となるDockerイメージが生成されているはず。
Started by user admin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/Sample
[Sample] $ /bin/sh -xe /tmp/jenkins3184583140096351880.sh
+ '[' -e project ']'
+ rm -rf project
+ git clone http://devops.example.com/root/project.git
Cloning into 'project'...
+ cd project
+ docker build . -t project:3
Sending build context to Docker daemon 53.76kB
Step 1/2 : FROM gitlab/gitlab-ce:13.7.3-ce.0
---> ffadb2afd260
Step 2/2 : COPY hello.txt /
---> e24f9f6e8e13
Successfully built e24f9f6e8e13
Successfully tagged project:3
Finished: SUCCESS
ちなみにここまで設定しておいてなんだが、GitLab画面からファイルを直接編集するような運用では、コミット毎に自動でJenkinsのジョブ実行って却って少ないんじゃないかと思う。
ファイルセーブするごとにCI/CDパイプラインが流れるとか、煩わしい。
その場合はWebhookを外して、Jenkinsにログインして手動でビルドジョブを実行するのが吉。
(追記 2021/01/09)思いのほかView数を稼ぐため記事をメンテ。オリジナルの発行は2019/05/03。