🛠️
何もしていないのに Azure Functions が壊れた
GitHub Actions から Azure Functions にコードをデプロイしたら関数が見えなくなるという現象が発生しました。
- デプロイ前は関数が見えていた
- インフラの変更はしていない
- 依存関係のバージョンを上げただけでコードの変更はしていない
- 依存関係のバージョンを戻しても改善しない
- GitHub Actions のワークフローも変更していない
GitHub Actions のワークフローでは build
と deploy
でジョブを分割していました。
jobs:
build:
steps:
- name: Checkout repos
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x
- name: Build source
shell: pwsh
run: dotnet publish -p:PublishDir=build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts
path: build
deploy:
needs: build
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: artifacts
- name: Connect to Azure
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Deploy artifacts
uses: azure/webapps-deploy@v2
with:
app-name: ${{secrets.AZURE_FUNC_NAME}}
package: artifacts
さらに調べてみると build
ジョブでアップロードした成果物に .azurefunctions
フォルダーが含まれていないことに気づきました。Azure Function では、以下のファイルが含まれている必要があるので、どうやらこれが原因のようです。
.azurefunctions/
extensions.json
functions.metadata
host.json
worker.config.json
.azurefunctions
フォルダーが含まれていない理由を探してみると、actions/upload-artifact@v4
の破壊的変更が影響していることがわかりました。v4.4
から隠しファイルは対象に含めないようになったようです。.azurefunctions
フォルダーは隠しファイルになるので、それで含まれなかったということです。
ということでワークフローを修正します。これで無事に動作するようになりました。
jobs:
build:
steps:
- name: Checkout repos
uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x
- name: Build source
shell: pwsh
run: dotnet publish -p:PublishDir=build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts
path: build
+ include-hidden-files: true
deploy:
needs: build
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: artifacts
- name: Connect to Azure
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Deploy artifacts
uses: azure/webapps-deploy@v2
with:
app-name: ${{secrets.AZURE_FUNC_NAME}}
package: artifacts
メジャー バージョンならともかくマイナー バージョンの変更で破壊的変更をいれるのやめてほしいです。
Discussion