shimapapa.io

.NET,VB,C#,AzureなどMS関連中心の技術ブログ

Azure Container InstancesでJenkinsを立ち上げる

概要

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をブラウザに入力すると・・・

f:id:rikupapa-shima:20190605054130p:plain

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

4. Jenkinsの設定

4-1. Unlock Jenkins

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

f:id:rikupapa-shima:20190605054038p:plain

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

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

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

$ cat initialAdminPassword

Jenkinsに戻ってパスワードを入力すると、初期設定画面に進みます。 f:id:rikupapa-shima:20190605054848p:plain

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

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

参考サイト