【AWS】初心者がDocker上にJenkinsを構築してみた【Linux】

最近AWSについて勉強している橋本です。

AWSを学び始めた時に付いて回るのが、そうDockerJenkinsです。
DockerとJenkinsでCI/CD環境を構築しろ!と言われるのがインフラエンジニアの宿命です。

そこで今回は手始めに、Docker上にJenkinsを構築する手順を
初心者にもわかりやすく紹介します。

ちなみに、Dockerが何か?Jenkinsが何か?という詳しい説明は
この記事ではやりません。
他の有益な記事を参考にしてください。

構築したいシステムの概要

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

赤枠の部分をこの記事では作成します。

最終的には、ソースコードをGitlabにプッシュしたら、
自動的にウェブサイトがデプロイされるように構築したいと考えています。

AWS CodePipelineは構築していないので、できるかどうか今のところ分かりませんが、
とりあえずjenkins on dockerサーバを構築します。

Gitlabの構築は別の記事で書こうと考えていますが、まだ書いていません。書いたらURLを貼ります。

EC2の設定

Docker上にJenkinsを構築するために、始めにEC2の設定を行います。

ウェブフックを使用してAWS CodePipelineに通知を行うだけなので、
そこまで性能はいらないと考えています。以下のように構築しました。

【EC2の設定項目】

Amazon Linux2

t2.micro

今回はテストとして環境構築を行うため、パブリックサブネットに構築を行いました。
他のインスタンスの詳細の設定についてはデフォルトです。


30GBのストレージまで取得できるようなので、30GBにしときます。おそらく8GBでも大丈夫です。

タグには、わかりやすく名前でも付けておきましょう。

セキュリティグループは、上記のように3ポート使用します。
8080ポートを開放しているのは、Jenkinsのデフォルトのポートが8080だからです。

これでEC2の設定は完了です。

Dockerをインストール

ターミナルなどでSSH接続でEC2にログインします。

ログインしたら、以下のコマンドを上から順番に実行してください。

  1. バージョン管理を行うためのコマンドです。

  2. ディレクトリを作成するコマンドです。7.によるコマンドで、
    dockerコンテナをマウントする際に使用するディレクトリを作成しています。

  3. ディレクトリの所有者をec2-userに変更するコマンドです。
    このコマンドを実行しないと、7.によるコマンドで、
    ディレクトリの権限が無いためマウントできないというエラーが発生します。

  4. dockerをインストールするコマンドです。

  5. dockerを起動するコマンドです。

  6. jenkinsのdockerイメージをダウンロードするコマンドです。

    :lts:タグのことです。
    「sudo docker pull jenkins/jenkins:2.277.1-lts」のように
    別タグを指定すると別バージョンのjenkinsイメージをダウンロードできます。

    また、「sudo docker pull jenkins/jenkins」のようにタグを指定しない場合は、
    デフォルトの設定で最新版のjenkinsイメージがダウンロードされます。

    「sudo docker pull jenkins/jenkins:latest」も同様に
    最新版のjenkinsイメージがダウンロードされます。

  7. Jenkinsのdockerコンテナを作成するコマンドです。

    –name:–nameオプションは、dockerコンテナの名前を指定するコマンドです。
    上記の場合はコンテナ名を「myjenkins_test」にします。

    -p:コンテナのポートをホストに公開するオプションです。
    8080:Jenkinsのポータルにアクセスするためのポートです。
    50000:Jenkinsのスレーブにアクセスするためのポートです。

    -v:マウントする際のコマンドで、
    「-v EC2のディレクトリ:dockerコンテナ内のディレクトリ」で指定します。
    dockerコンテナ内のディレクトリは基本的に「/var/jenkins_home」です。

    EC2のディレクトリは、私の場合は「/opt/jenkins_home」にしていますが、
    プロジェクトで適宜変更してください。

    -vオプションでマウントしなかった場合、dockerを停止すると、
    dockerコンテナも削除されます。
    そのためjenkinsの設定も消えてしまいます。

    消えないようにするためには、EC2のディレクトリ(/opt/jenkins_home)を
    dockerコンテナ内にあるjenkinsの設定を行っているディレクトリ(/var/jenkins_home)にマウントします。

    補足:Linuxでは/optのディレクトリに実行時に書き換えられない
     アプリケーションソフトウェアパッケージを格納します。
    Linuxのディレクトリの使い分けについて(https://www.linuxmaster.jp/linux_skill/2010/02/06linux.html

その他のよく使うDockerコマンドについて

  • dockerコンテナが実行されているかを確認するコマンドです。
    実行されている場合:up 2 minites ago のように時間表示されており、
    停止している場合:Exited 2 minites ago の表示になっています。

    dockerコンテナの停止コマンドです。
    「0b5aad08487b」の部分は、停止したいdockerコンテナのIDを指定してください。

  • dockerを停止するコマンドです。

  • dockrtコンテナを削除するコマンドです。
    「sudo docker ps -a」でコンテナIDを確認して削除できます。
    「bd04503377ef」の部分は、停止したいdockerコンテナのIDを指定してください。

Jenkinsにブラウザでアクセス

ここまでの設定を行うと、「http://パブリックIPアドレス:8080/」で
Jenkinsにアクセスできます。
私の場合は、「http://13.112.165.130:8080/」でした。(このURLは、使えません。)

Administrator passwordについて

始めてJenkinsにアクセスすると、Administrator passwordを求められるので、
パスワードの確認を行います。

パスワードは、dockerコンテナ内の/var/jenkins_home/secrets/initialAdminPasswordに
書かれているので、まずはdockerコンテナに入ります。

  1. dockerコンテナIDを確認するコマンドです。

  2. dockerコンテナにアクセスするコマンドです。
    1.で確認したdockerコンテナに変更してコマンドを実行してください。

  3. Administrator password確認コマンドです。

これで、Docker上にJenkinsを構築することができました!
「Install suggested plugins」をクリックして初期設定を行ってください。

EC2やコンテナの再起動時のコマンド

EC2インスタンスをずっと起動させておくわけにはいかないので、
コンテナを再起動する方法を紹介します。
EC2を再起動した後に、SSH接続し、以下のコマンドを実行してください。

  1. dockerを起動させるコマンドです。

  2. dockerコンテナが実行されているかを確認するコマンドです。
    マウントしたdockerコンテナのコンテナIDを確認します。

  3. dockerコンテナを起動させるコマンドです。
    これで、設定を保存したdockerコンテナを起動することができます。
    「bd04503377ef」の部分はコンテナIDを指定します。

まとめ

この記事では、Docker上にJenkinsの構築を行いました。

  1. EC2の設定

  2. yumのアップデート

  3. ディレクトリの作成・権限変更

  4. dockerの起動

  5. dockerイメージのダウンロード

  6. コンテナ作成

  7. Administrator passwordの確認

やってみた感想としては、簡単な環境を構築するにも意外と引っかかる点が多く、
思ったよりも時間がかかったなと思いました。

特にディレクトリの権限やコンテナ作成の際のdockerコンテナのマウントに関しては、
何回もやり直しました。

この記事が皆さんのDocker構築の一助になれば幸いです。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス