⚰️

Jenkinsを勉強する - Jenkins構築からビルドまで

2023/02/18に公開

はじめに

久しぶりの投稿です。
個人的な話ですが、、、新しい現場に行くことになり知識不足だなと感じました。
そのため勉強すると共に自分用の備忘録として残します。

勉強の対象はタイトルに記載している通り Jenkins です。
JenkinsはDockerを使って構築します。

作業環境

  • OS
    • macOS Big Sur(ver11.5.2)
  • Docker
    • 20.10.22, build 3a2c30b
      今回はDocker上にJenkinsを建てるので、macOSのバージョンが古くても問題なし。
      ※Dockerをインストールする手順は省きます

Jenkinsのイメージを取得する

DockerHubにある Jenkinsの公式イメージ を使います。

とりあえず、最新版を取得します。

イメージを取得する
$ docker pull jenkins/jenkins

docker run で指定していきなりコンテナを起動しても大丈夫です。
取得したイメージは以下のコマンドで確認できます。

取得したイメージを確認する
$ docker images
REPOSITORY                           TAG             IMAGE ID       CREATED         SIZE
jenkins/jenkins                      latest          f16216f97fcb   8 days ago      467MB

ちなみにイメージが置かれているディレクトリですが
私はDesktop版を使っているため、Preferences > Resources > Advanced で確認できました。
(イメージが不要になったら docker rmi もしくはDesktop版から削除が出来るため、ファイルの場所はそこまで気にする必要がないです)

コンテナ起動

docker run でコンテナを起動することができます
※オプションの意味を知りたい方はご自身で調べてください

コンテナを起動する
$ docker run --name jenkins -p 8080:8080 -p 50000:50000 -v {workspace}/{dir_name}:/var/jenkins_home jenkins/jenkins

-v だけ軽く説明しますが、ローカルのディレクトリをコンテナ内にマウントさせることができます。
これを行うことで、コンテナを起動する際にここのファイルが読み込まれるため、起動する度に初期セットアップをしなくて済みます。
コンテナ内のJenkinsのワークスペースは /var/jenkins_home のようです。

実行後に、以下のような出力が出ていれば起動しています。
(バックグラウンドで起動していないため、コンソールに出力されています)

Running from: /usr/share/jenkins/jenkins.war
~ 省略 ~
Please use the following password to proceed to installation:

40393b065db84378bc2f8b40bc4bafd6

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
~ 省略 ~

初回セットアップ時に必要な、パスワードが出力されているので控えましょう。
もしくはマウントしたディレクトリに上記のファイルが出力されているので、中身を確認してください。

コンテナが起動しているか確認する
$ docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                              NAMES
f1abb6e45107   jenkins/jenkins   "/usr/bin/tini -- /u…"   17 minutes ago   Up 17 minutes   0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins

docker run したコンソールは入力を受け付けない状態になっているので、コンソールをもう一つ出して確認してみてください。
STATUSがUpになっていれば起動しています。

Jenkinsにログインする

Jenkinsが起動している状態であれば、Webブラウザからアクセスが可能です。
ローカル上に構築しているため、以下でアクセスが可能です。

http://localhost:8080/

先ほどのパスワードを入力して、「Continue」をクリックします。


合っていれば、カスタマイズのページに遷移するので、プラグインをインストールしましょう。
「Install suggested plugins」でいいと思います。(どのみち後で自由にいじれます)

出力されていたログを見たら、約8分かかってました

2023-02-17 17:16:54.876+0000 [id=76]    INFO    h.m.UpdateCenter$CompleteBatchJob#run: Completed installation of 83 plugins in 7 min 48 sec

Adminの情報は適当に入力してください。
勉強をするための環境なのでスキップしがちですが、、、ユーザー管理やロール管理の設定を行いたいので設定しておきます。


ローカル環境なのでそのままにします。
AWSとかに構築するときは、DNS系のサービスにインスタンスのパブリックIPアドレス(EIPでも)を登録しておけば、好きなドメインでアクセス出来そうですね。


ということで無事にアクセスまで出来ました。

作業を一時中断する

ローカルで動作しているので、PCを終了させたらコンテナは停止します。
docker stop を使って正常にコンテナを停止してあげましょう。

コンテナを停止する
$ docker stop jenkins
jenkins
コンテナが停止しているか確認する
$ docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                       PORTS     NAMES
f1abb6e45107   jenkins/jenkins   "/usr/bin/tini -- /u…"   46 minutes ago   Exited (143) 2 minutes ago             jenkins

STATUS が Exited になっているので停止しました。なのでJenkinsにアクセスしようとしてもページは表示されません

作業を再開する

勉強の続きやるかーって感じで、コンテナを起動してあげましょう。

コンテナを起動させる
$ docker start jenkins
jenkins
コンテナが起動しているか確認する
$ docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS         PORTS                                              NAMES
f1abb6e45107   jenkins/jenkins   "/usr/bin/tini -- /u…"   50 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins

STATUS が Up になりました。
これでJenkinsにアクセスして、ログイン画面が表示されればOKです。


Jenkinsさん
ダンディーですね〜。

ジョブを登録してビルドしてみる

※Jenkinsのバージョンが 2.375.3 でのUIになります。

ジョブの作成

ファイルを作るジョブでも作ってビルドしてみます。
「新規ジョブ作成」をクリックします。

ジョブ名は用途に合わせて設定しましょう。
ビルドの種類?は「フリースタイル・プロジェクトのビルド」を選んでおきます。


ジョブが作成できました。

General

ジョブの一般的な設定を行うセクションです。
今回はパラメータに入力した値をファイル名に使いファイルを作りたいので、パラメータを設定します。

ビルドのパラメータ化 > パラメータの追加 > 文字列 の順にクリックすると

以下のようなフォームが表示されます。
今回は以下のように設定しました。

  • 名前
    file_name
  • デフォルト値
    jenkins_test.txt
  • 説明
    作成するファイル名を入力してください。

Build Steps

ビルドで何をさせるかを設定するセクションです。
今回はシェルでファイルを作成したいと思います。
(色々な設定が出来るので、別で記事を作成できたらと思います)

「Build Steps」があるので、ビルド手順の追加 > シェルの実行 の順にクリックします。

すると以下のフォームが表示されます。

先ほど設定したパラメータを受け取りファイルを作成するスクリプトを書きます。
今回は以下のように設定しました。

#!/bin/bash

touch ${file_name}

設定したら、保存 をクリックします。
保存が終わるとジョブの画面になルので、パラメータ付きビルド をクリックします。

ビルドをクリックして実行しましょう。

画面左下にビルド履歴が表示されており、そこに実行したジョブの履歴が表示されていきます。

チェックマーク をクリックすると、コンソール出力 の画面に遷移します。
#{number}日付 をクリックすると、ビルドの状態 の画面に遷移します。

作成されたファイルを確認する

今回はファイル名しか指定しなかったため、実行したジョブの workspace にファイルが作られています。コンソール出力の画面に表示されている以下がそうです。

Building in workspace /var/jenkins_home/workspace/create_file

Webブラウザからは、ジョブのワークスペースをクリックすることで確認ができます。

ローカルからもマウントしてコンテナを作ったため確認ができます。

コンソールから確認する
$ ls workspace/create_file/jenkins_test.txt
workspace/create_file/jenkins_test.txt

コンテナに入って確認したい場合は、以下を試してください。

コンテナに入って確認する
$ docker exec -it jenkins /bin/bash
jenkins@f1abb6e45107:/$
jenkins@f1abb6e45107:/$ ls /var/jenkins_home/workspace/create_file/jenkins_test.txt 
/var/jenkins_home/workspace/create_file/jenkins_test.txt
jenkins@f1abb6e45107:/$ exit

ということで、ファイルを作成するジョブの作成と動作確認が出来ました。
今回の内容的には、切りがよいためこの辺で終わりたいと思います。

Dockerを久しぶりに使ったので、良い時間になりました。
次は、ユーザー管理の記事でも書きたいと思います。それでは。

Discussion