アリババクラウド上のDockerコンテナにJenkinsを設定する

このチュートリアルでは、**Alibaba Cloud**上の**Docker**コンテナで**Jenkins**を設定します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/setting-up-jenkins-in-a-container-on-alibaba-cloud_595393)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#必要条件
-Ubuntu 18.04 以上がインストールされた Alibaba Cloud ECS インスタンス上で動作する仮想マシン。

-信頼できるインターネット接続。

-管理者権限を持つコンピュータ。

#仮想マシンへのDockerのインストール
最初のステップは、ホストマシンにDockerが適切にインストールされていることを確認することです。Dockerがインストールされていることを確認するには、ご使用のマシンで以下の手順に従ってください。

1.パッケージのローカルリポジトリを更新します。

```
$ sudo apt-get update
```

2.HTTPSで暗号化されたパッケージをダウンロードできるようにするためのapt-transport-https、Dockerイメージをダウンロードしてインストールしようとするときにセキュリティ証明書をダウンロードできるようにするためのca-certificates、リモートのhttpエンドポイントを照会できるようにするためのcurl、Dockerをインストールするために必要なパッケージであるgnupg-agentとsoftware-properties-agentをインストールします。

```
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent Software-properties-common
```

3.Dockerのoffcial PGPキーを追加します。これは、dockerのレジストリとの通信が暗号化されて安全な状態を維持できるようにするためです。以下のコマンドで行うことができます。

```
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```


4.Dockerの安定版リポジトリを設定します。

```
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) Stable”
```

5.aptパッケージのインデックスを更新します。

```
$ sudo apt-get update
```

6.最新版のDockerエンジンとdocker-composeをインストールします。

```
$ sudo apt-get install docker docker-compose
```

7.以下のコマンドを実行して、Dockerが正しくインストールされていることを確認します。

```
$ sudo docker run hello-world
```

このコマンドは、docker用のテストイメージをダウンロードし、そのイメージを実行します。操作が完全に成功すると、下の画像のようなイメージが送られてくるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/951888a4-8e5b-2565-f15d-54c59d591f00.png)

#DockerリポジトリからJenkinsのDockerイメージを取得する
Dockerリポジトリには、Jenkins、Jira、Java、NodeJSなど、さまざまなソフトウェアのイメージが格納されています。Jenkinsの場合、コンテナ化された環境でJenkinsを実行できるようにするためには、JenkinsのDockerイメージを公式のDockerリポジトリからダウンロードする必要があります。そこで、自分でイメージを構築するのではなく、Dockerのレジストリからイメージを引っ張ってきて、インストールしてローカルで実行することにします。

1.docker pullコマンドを実行してJenkinsのイメージを取得します。

```
$ docker pull jenkins
```

このコマンドを実行すると、シェルに似たようなテキストが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/23471592-8a1f-3e08-a626-e8b67a3e4ad3.png)

2.pullコマンドが正常に完了したことを確認するには、ターミナルでdocker imagesコマンドを実行して、jenkins imagesが既にリストアップされていることを確認します。

```
$ docker images
```

このコマンドを実行すると、ローカルにインストールされているJenkinsイメージを明確に識別できるように、ターミナルにこのようなプリントが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9ca105ea-e360-dd1f-2654-874290638317.png)

#DockerコンテナでJenkinsを実行する
先ほどのコマンドを実行することで、Dockerを設定し、Jenkinsのdockerイメージをローカルコンピュータにインストールしました。今度はインストール済みのjenkinsのイメージを使って、dockerイメージの中で実行してみましょう。

1.docker psコマンドを入力して、jenkinsのdockerイメージがまだ実行されていないか確認します。

```
$ docker ps
```

ターミナルでこのコマンドを実行すると、このような出力が得られるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7bd8c561-ae79-8690-9f16-41634793fe76.png)

上の画像では、MySQLとwordpressのdockerイメージが動いているのがわかりますが、Jenkinsのイメージはありません。

Jenkinsのdockerイメージは既にあります。しかし、このイメージをコンテナで動かすためには、Jenkinsのdockerのイメージをビルドして実行する必要があります。

2.Jenkinsのdockerのイメージを実行するには、以下のコマンドを実行する必要があります。

```
$ docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
```

上記のコマンドでコンテナ内でJenkinsを実行し、localhostの8080番ポートで利用できるようにします。

>注意: 上記のコマンドはJenkinsに永続的なストレージを提供していないため、コンテナが停止したり削除されたりすると、すべてのデータが削除されてしまいます。しかし、本番環境では、そのようなことが起きないようにしたいものです。そのような動作を避けるために、dockerインスタンスにストレージデバイスをアタッチします。

Docker はボリュームを提供しており、これにより docker コンテナにストレージを追加することができます。

3.以下のコマンドを実行して、コンテナの停止や削除時にデータを失わずにJenkinsを実行します。

```
$ docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
```

このコマンドを実行すると、以下のパスにもjenkinsフォルダが作成されます。

```
$ /var/jenkins_home jenkins/
```

4.jenkins用のdockerコンテナが作成されている間に、jenkinsはまた、以下のようにターミナルで見つけることができるパスワードを自動的に生成するか、またはファイルの中で見つけたファイルの中で見つけることができます。

```
$ /var/jenkins_home/secrets/initialAdminPassword
```

以下は、initialAdminPasswordファイルの内容のサンプルの画面キャプチャです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fccfa6a8-1636-681d-8d09-fa107fdd67ea.png)

>注：パスワードはそこに表示されているものとは異なります。パスワードを知っておく必要があります。端末のパスポートをコピーしておくと後で使えるようになります。

5.ブラウザからJenkinsにアクセスする これを行うには、`localhost:8080`というアドレスでブラウザを開くと、以下のようなWebページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/39e27b29-aa2c-cb42-f12a-a33c3510a6f3.png)


6.ターミナルからコピーした管理者パスワードを入力するか、`/var/jenkins_home/secrets/initialAdminPassword` ファイルから取得すると、インストールページに移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/37335a21-56fb-ac1c-2be3-6dc570320dbe.png)

7.次に、プラグインを直接インストールする場合は「Install suggested plugins」を、特定のJenkinsプラグインをインストールしたい場合は「Select plugins to install」をクリックします。7.次に、目的のプラグインを選択してインストールをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/97912477-2440-e6fe-7365-4242df6bee62.png)

8.インストールプロセスは、あなたが最初の管理者ユーザーを作成するページにリダイレクトされ、その後、いくつかの時間がかかることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/57adf1cd-f547-9053-226a-1d8aed8a2620.png)

9.別の管理者ユーザーを作成するか、Jenkinsで作成した管理者ユーザーを継続するかを選択しました。ここでは、デフォルトの管理者ユーザーをそのまま継続します。Continue as adminボタンをクリックします。その後、以下のような設定画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e5e4737c-e7a8-051c-9f1d-f710e01c2fa0.png)


これらのデフォルト設定を変更する必要はありませんが、「保存して終了」ボタンをクリックするだけで、これらの設定を保存することができます。

10.その後，最後の設定ページに移動し，Jenkinsへのログインに使用する資格情報を教えてくれます。ここでは、adminをデフォルトのユーザ名とし、 initialPasswordファイルからコピーした管理者パスワードを管理者パスワードとしたページの例を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f3998cd1-0386-b9cd-ff78-07046129293b.png)

11.次に、Start Using Jenkinsをクリックするだけで、Jenkinsダッシュボードに移動します。そこでは実行するJenkinsジョブを作成することができます。以下はJenkinsのダッシュボードの画面キャプチャです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/47ac064a-c1b0-9eb6-70ea-e5150ef4b230.png)


#結論
これでこのチュートリアルは終了です。今回のチュートリアルでは、Ubuntuを実行しているLinux仮想マシンにdockerをインストールして設定する方法、Jenkins Imageをインストールして設定する方法、そしてコンテナ化された仮想マシン内で実行する方法を学びました。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*