はじめに
こんにちは!11月は登壇2本に講師対応と忙しかったですが、今月は社内で導入を検討しているシステムの調査をしているなーがです。前回から少し時間が空いてしまいましたが、今回はアドベントカレンダー21日目として、Azure DevOpsのCDパイプラインでデプロイ時に発生したエラーを解決した方法について書こうと思います。
とある先日のこと
先輩があるシステムでデプロイを行った際にエラーが発生したので調査を依頼されました。そのシステムはAzure上にデプロイされており、ソースコードはAzure DevOpsで管理されているためAzure PipelinesのCDパイプライン(Releases)のログを確認しました。すると、下記のようなエラーが確認できました。
Unsupported authentication scheme ‘WorkloadIdentityFederation’ for Azure endpoint.
Azure エンドポイントでサポートされていない認証スキーム ‘WorkloadIdentityFederation’ があります。
そのため、AzureとAzure Pipelinesの接続設定であるService connectionsの該当リソースからManage App registrationをクリックし、サービスプリンシパルを確認しました。
すると、クライアントシークレットの有効期限が切れていました。
調査結果を先輩に報告したところ、先程エラーとなっていたCDパイプライン内のタスク「AzureBlob File Copy」がバージョン3であることからクライアントシークレットを使う必要があり、その有効期限が切れていたためデプロイが失敗していると判明しました。
現在では「AzureBlob File Copy」のバージョンは6まで出ており、 ワークロード ID フェデレーションを使用するサービス接続もサポートされるようになっています。 そのため、先輩に ワークロード ID フェデレーションへの切り替えとCDパイプラインの実行をしてもらったところ、無事にデプロイが成功しました。
めでたしめでたし…
と思ったのも束の間!
デプロイしたアプリケーションにアクセスしてみると、CSSが適用されていませんでした…
ここからが本題です!
CDNに対してデプロイしたファイルが、どれも404エラーでアプリから読み込めなくなっていました。そこでAzureのCDNリソースを確認してみると、cdnというフォルダが作成されてその中にアップロードされていたためでした。
これはCIパイプラインでビルド成果物の公開名(Artifact name)でcdn
とし、CDパイプラインのソースで以下のように参照していたためです。
CIパイプライン
CDパイプライン
「AzureBlob File Copy」のバージョンが3の時は問題なくデプロイされてCSSも適切に適用されていました。そこで、AzureFileCopyに関するMSの公式ドキュメントやリポジトリの変更履歴、Issueを見ても解決方法が分かりませんでした。(ご存じの方はコメントで教えて頂けると助かります!)
どうするか
ダメもとで、CDパイプラインのソースで以下のように設定してみたところ、デプロイが成功し、無事にCSSも適用されていました。
さいごに
今回はAzure DevOpsのCDパイプラインでデプロイ時に発生したエラーを解決した方法について書きました。公式に記載がないため根拠があるわけではありませんが、同様の現象で困っている方の参考になれば幸いです。今後も業務で学んだことをブログにしていきたいと思います。