Azure Container InstancesでJenkinsを立ち上げる

※ 個人blogに投稿した記事（投稿日：2019/6/5）をQiitaに移行しました

# 概要
Jenkinsに一度触れてみたくて、現在udemyでJenkinsの講座を受講しています。
先日Dockerの講座も受講完了したのと、今後Azureの勉強も始めたいことを踏まえ、
Azure Container Instances上にJenkinsを立ち上げて見たいと思います。

※Azureには「Azure Devops」というCI/CDサービスが存在していますが・・・
  
# 手順
Azureの操作はほぼ初めて。
今回はAzureのポータル上からCLIでリソースの操作が行えるAzure Cloud Shellで実行していきます。
  
## 1. リソースグループの作成
今回は「jenkinsResource」という名前のリソースグループを作成します。

``` 
az group create --name jenkinsResource --location eastus
```

成功すると以下のような結果が表示されます。

```
"id": "/subscriptions/d7eb1cd7-6516-4492-9006-6a138b4dfaae/resourceGroups/jenkinsResource",
  "location": "eastus",
  "managedBy": null,
  "name": "jenkinsResource",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": null
}
```

## 2. Azureファイル共有の作成
Jenkinsコンテナのデータを永続化させるため、ストレージ アカウントとファイル共有を作成します。

### 2-1. 環境変数STORAGE_ACCOUNT_NAMEのセット
ストレージアカウント名をRANDOMを付けて適当に設定します。

```
$ STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
```

### 2-2. ストレージ アカウントを作成
```
az storage account create \
  --resource-group jenkinsResource \
  --name $STORAGE_ACCOUNT_NAME \
  --sku Standard_LRS \
  --location eastus
```

###  2-3. 環境変数AZURE_STORAGE_CONNECTION_STRING のセット
続いてストレージ アカウントの接続文字列をセットします。

```
$ export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string \
  --resource-group jenkinsResource \
  --name $STORAGE_ACCOUNT_NAME \
  --output tsv)
```

### 2-4. ファイル共有の作成
今回は「aci-jenkins」という名前でファイル共有を作成します。

```
az storage share create --name aci-jenkins
```

### 2-5. 環境変数STORAGE_KEY のセット
コンテナにAzure ファイル共有をマウントするために、ストレージ アカウント アクセス キーを取得し、
環境変数にセットします。

```
$ STORAGE_KEY=$(az storage account keys list \
  --resource-group jenkinsResource \
  --account-name $STORAGE_ACCOUNT_NAME \
  --query "[0].value" \
  --output tsv)
```

$STORAGE_KEYの値の確認。

```
$ echo $STORAGE_KEY
```

## 3. コンテナの作成と起動確認
### 3-1. コンテナの作成
準備ができたのでコンテナの作成をします。
今回は「aci-jenkins」という名前のコンテナとします。
（ファイル共有と同じ名前にしてしまって紛らわしい）
portsはJenkinsの設定値である8080にしておきます。
以下コマンドを実行後、しばらく待つとコンテナが起動します。

```
az container create \
  --resource-group jenkinsResource \
  --name aci-jenkins \
  --image jenkinsci/blueocean \
  --location eastus \
  --ports 8080 \
  --ip-address Public \
  --azure-file-volume-account-name $STORAGE_ACCOUNT_NAME \
  --azure-file-volume-account-key $STORAGE_KEY \
  --azure-file-volume-share-name aci-jenkins \
  --azure-file-volume-mount-path /var/jenkins_home/
```

### 3-2. ストレージのマウントの確認
前項でAzureファイル共有にマウントした「/var/jenkins_home/」の内容が表示されます。

```
$ az storage file list -s aci-jenkins -o table
Name                      Content Length    Type    Last Modified
------------------------  ----------------  ------  ---------------
.cache/                                     dir
.java/                                      dir
copy_reference_file.log   3926              file
failed-boot-attempts.txt  29                file
jobs/                                       dir
plugins/                                    dir
secret.key                64                file
secret.key.not-so-secret  0                 file
war/                                        dir
```

### 3-3. IPアドレスの確認
```
az container show \
--resource-group jenkinsResource \
--name aci-jenkins \
--query ipAddress.ip \
--output tsv
```

### 3-4. 起動の確認
前項で出力されたIPアドレスとポート8080をブラウザに入力すると・・・

![20190605054130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23789/bb3933ed-bd7b-2b58-a872-3b635d927998.png)

Jenkinsの画面が表示されました！

## 4. Jenkinsの設定
### 4-1. Unlock Jenkins

前項の画面の後、初期パスワードを入力する画面が表示されます。
解除するには画面に表示されている通り「var/jenkins_home/secrets/initialAdminPassword」に記載されている値を入力します。  

![20190605054038.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23789/a7ac6de8-ea01-ae7d-0666-8a6cd2bfced7.png)

Cloud Shell セッションにファイルをダウンロードします。

```
az storage file download -s aci-jenkins -p secrets/initialAdminPassword
```

ダウンロード後、catコマンドを実行するとパスワードの値が出力されます。

```
$ cat initialAdminPassword
```

Jenkinsに戻ってパスワードを入力すると、初期設定画面に進みます。

![20190605054848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23789/1b005ebf-4251-7c8c-fe85-a85cf1234a73.png)

※上記画面で「Install suggested plugins」を入力したあと、
「No valid crumb was included in the request」というエラーが表示されましたが、
Retryボタンを押すと次に進みました。

以上、Azure Container InstancesでJenkinsを立ち上げるでした。