9
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitLabからWebhook飛ばしてJenkinsのJobを実行する。プラグイン0で

Last updated at Posted at 2019-05-03

昨日に引き続くメモ。
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。

9
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?