Azure Web App + GitHub Actionsセルフホストランナー(Proxy越え)でCI/CDを試す

Azure Web AppとGitHub Actionsの連携は、[公式マニュアル](https://docs.microsoft.com/ja-jp/azure/app-service/deploy-github-actions?tabs=applevel) が公開されており非常に簡単に実現できます。

今回試したのは、GitHub Actionsセルフホストランナーを使って、且つランナーの配置先がProxy環境下のケースでやってみました。

# 前提条件
* Azure Web Appとセルフホストランナーの作成手順は割愛します
* Java(Spring Boot)で試しています
* セルフホストランナーにはmavenを事前にインストールしています

# pom.xml準備
* Azure Web Appにデプロイできるようpom.xmlを準備しておきます。Azureプラグイン部分のみ抜粋します。
* いきなり運用スロットにデプロイするのではなく、stagingスロットにデプロイするようにしています。

```xml
~ 省略 ~
      <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>2.0.0</version>
        <configuration>
          <schemaVersion>v2</schemaVersion>
          <subscriptionId>[Your Subscription ID]</subscriptionId>
          <resourceGroup>[Your ResourceGroup Name]</resourceGroup>
          <appName>[Your Web App Name]</appName>
          <pricingTier>P1v2</pricingTier>
          <region>japaneast</region>
          <runtime>
            <os>Linux</os>
            <javaVersion>Java 8</javaVersion>
            <webContainer>Java SE</webContainer>
          </runtime>
          <deployment>
            <resources>
              <resource>
                <directory>${project.basedir}/target</directory>
                <includes>
                  <include>*.jar</include>
                </includes>
              </resource>
            </resources>
          </deployment>
          <deploymentSlot>
            <name>staging</name>
            <configurationSource></configurationSource>
          </deploymentSlot>
        </configuration>
      </plugin>
~ 省略 ~
```

# GitHub Secrets作成
* GitHubリポジトリの[Settings]-[Secrets]から[New repository secret]を選択し、KeyValue形式でシークレットを作成します。
* ActionsのYAMLファイルからは ```${{ secrets.[Your Secret Name] }}``` の形式で利用することができます。

# GitHub Actionsワークフロー定義作成
GitHubリポジトリに ```.github/workflows``` ディレクトリを作成し、YAMLファイルを作成します。ファイル名は任意です。

```yaml
name: Build and deploy JAR app to Azure Web App

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: [Your Self-hosted Runner Name]

    steps:
    - uses: actions/checkout@v2

    - name: Set up Java version
      uses: actions/setup-java@v1
      with:
        java-version: '8'

    - name: Install Azure CLI
      run: curl -sL https://aka.ms/InstallAzureCLIDeb | bash

    - name: Azure CLI Login
      run: az login --service-principal --username ${{ secrets.APP_ID }} --password ${{ secrets.PASSWORD }} --tenant ${{ secrets.TENANT_ID }}

    - name: Build with Maven
      run: mvn package --file ./complete/pom.xml -Dhttps.proxyHost=${{ secrets.proxyHost }} -Dhttps.proxyPort=${{ secrets.proxyPort }}

  deploy:
    runs-on: [Your Self-hosted Runner Name]
    needs: build

    steps:
    - name: Set up Java version
      uses: actions/setup-java@v1
      with:
        java-version: '8'

    - name: Deploy to Azure Web App
      run: mvn package --file ./complete/pom.xml azure-webapp:deploy -Dhttps.proxyHost=${{ secrets.proxyHost }} -Dhttps.proxyPort=${{ secrets.proxyPort }}
```

* ここまで準備してmainブランチを更新すると、指定したWebAppのstagingスロットにデプロイされるはずです。
* [公式マニュアル](https://docs.microsoft.com/ja-jp/azure/app-service/deploy-github-actions?tabs=applevel) 通りにやると、 ```Azure/webapps-deploy@v2``` アクションを使うことで簡単にデプロイできますが、proxy指定をすることができなかったためAzure CLIを使ってデプロイしています。```mvn package azure-webapp:deploy``` をするためにAzure CLIで事前にログインをしています。
* 今回Azure CLIのインストールから行っていますが、事前にセルフホストランナーにインストールしておけば、ログイン手順のみで実現可能です。

以上