チュートリアル: ビルド成果物に Azure Storage を使用する
重要
多くの Azure サービスには Jenkins プラグインがあります。これらのプラグインの一部は、2024 年 2 月 29 日時点ではサポート対象外となります。 Azure CLI は、Jenkins と Azure サービスを統合するために現在推奨されている方法です。 詳細については、「Azure 用の Jenkins プラグイン」を参照してください。
この記事では、Jenkins 継続的インテグレーション (CI) ソリューションで作成されるビルド アーティファクトのリポジトリとして、またはビルド プロセスで使用されるダウンロード可能なファイルのソースとして BLOB ストレージを使用する方法について説明します。 このソリューションが有用になるシナリオの 1 つは、アジャイル開発環境で (Java などの言語を使って) コーディングをしており、継続的インテグレーションに基づいてビルドを実行するとき、ビルド アーティファクト用のリポジトリが必要な場合です。このリポジトリがあれば、ビルド アーティファクトを他の組織のメンバーや顧客と共有したり、そのアーカイブを保存したりできます。 もう 1 つのシナリオとしては、ビルド ジョブ自体にその他のファイルが必要になる場合、たとえば、ビルドの入力で依存関係のダウンロードが必要になる場合などが考えられます。
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。
- Jenkins サーバー: Jenkins サーバーがインストールされていない場合は、Azure に Jenkins サーバーを作成します。
- Azure CLI: Azure CLI (バージョン 2.0.67 以降) を Jenkins サーバーにインストールします。
- Azure ストレージ アカウント: まだストレージ アカウントがない場合は、ストレージ アカウントを作成します。
Azure CLI を実行するために必要な Azure の資格情報を追加する
Jenkins ポータルに移動します。
メニューから、[Manage Jenkins]\(Jenkins の管理\) を選択します。
[資格情報の管理] を選択します。
グローバル ドメインを選択します。
[Add Credentials](資格情報の追加) を選択します。
必須フィールドに以下のとおり入力します。
- [種類]: [ユーザー名とパスワード] を選択します。
- ユーザー名: サービス プリンシパルの
appId
を指定します。 - パスワード: サービス プリンシパルの
password
を指定します。 - ID:
azuresp
などの、資格情報の識別子を指定します。 - [説明]: 必要に応じて、環境を表すわかりやすい説明を含めます。
[OK] を選択して資格情報を作成します。
パイプライン ジョブを作成してビルド成果物をアップロードする
次の手順では、パイプライン ジョブの作成について順番に説明します。 パイプライン ジョブでは、Azure CLI を使用して複数のファイルを作成し、それらのファイルをお使いのストレージ アカウントにアップロードします。
Jenkins ダッシュボードから [New Item]\(新しい項目\) を選択します。
ジョブに myjob という名前を指定し、[Pipeline]\(パイプライン\) を選択してから [OK] を選択します。
ジョブ構成の [Pipeline]\(パイプライン\) セクションで、[Pipeline script]\(パイプライン スクリプト\) を選択し、以下を [スクリプト] に貼り付けます。 プレースホルダーは、お使いの環境に合った適切な値になるように編集してください。
pipeline { agent any environment { AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999' AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999' AZURE_STORAGE_ACCOUNT='myStorageAccount' } stages { stage('Build') { steps { sh 'rm -rf *' sh 'mkdir text' sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt' sh 'date > ./text/date.txt' } post { success { withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' echo $container_name # Login to Azure with ServicePrincipal az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID # Set default subscription az account set --subscription $AZURE_SUBSCRIPTION_ID # Execute upload to Azure az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT # Logout from Azure az logout ''' } } } } } }
[Build Now]\(今すぐビルド\) を選択し、myjob を実行します。
コンソール出力でステータスを確認します。 ビルド後のアクションによってビルド成果物がアップロードされると、Azure Storage のステータス メッセージがコンソールに書き込まれます。
"
ValidationError: You do not have the required permissions needed to perform this operation.
" のようなエラーが発生した場合は、コンテナー レベルでアクセスを許可する必要があることを示します。このエラー メッセージが表示された場合は、次の記事を参照して解決してください。ジョブが正常に完了したら、パブリック BLOB を開いてビルド成果物を確認します。
- Azure portal にサインインします。
- [ストレージ] を選択します。
- Jenkins に使用したストレージ アカウント名を選択します。
- コンテナーを選択します。
- BLOB の一覧で、myjob という名前のコンテナーを選択します。
- hello.txt と date.txt という 2 つのファイルが表示されます。
- そのどちらかの項目の URL をコピーして、ブラウザーに貼り付けます。
- このテキスト ファイルがビルド アーティファクトとしてアップロードされていることがわかります。
重要なポイント:
- Azure Storage では、コンテナー名と BLOB 名は小文字です (大文字と小文字は区別されます)。
Azure BLOB ストレージからダウンロードするためのパイプライン ジョブを作成する
次の手順では、項目を Azure BLOB ストレージからダウンロードするようにパイプライン ジョブを構成する方法を示します。
ジョブ構成の [Pipeline]\(パイプライン\) セクションで、[Pipeline script]\(パイプライン スクリプト\) を選択し、以下を [スクリプト] に貼り付けます。 プレースホルダーは、お使いの環境に合った適切な値になるように編集してください。
pipeline { agent any environment { AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999' AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999' AZURE_STORAGE_ACCOUNT='myStorageAccount' } stages { stage('Build') { steps { withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' # Login to Azure with ServicePrincipal az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID # Set default subscription az account set --subscription $AZURE_SUBSCRIPTION_ID # Execute upload to Azure az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login # Logout from Azure az logout ''' } } } } }
ビルドを実行した後、ビルド履歴コンソールの出力を確認します。 または、ダウンロード先を調べて、想定した BLOB が正常にダウンロードされたかどうかを確認することもできます。