Open3

GitHub Enterprise Server から Private Endpoint を利用した Web Apps にデプロイする

Tsubasa NomuraTsubasa Nomura

やりたいこと

以下の方法は、オンプレではなく Azure 上に GitHub Enterprise Server を構築します。
また、簡単のために TLS は使わない設定にします。

事前準備

Azure へのデプロイ

ハードウェア要件

GitHub Actions を利用したい場合は、8コア 64 GB のメモリが推奨です。

https://docs.github.com/ja/enterprise-server@3.7/admin/installation/setting-up-a-github-enterprise-server-instance/installing-github-enterprise-server-on-azure
https://docs.github.com/ja/enterprise-server@3.7/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-github-actions-for-github-enterprise-server#review-hardware-considerations

仮想マシンはマーケットプレイスに用意されています。

デプロイ後


セットアップ

Management Console からセットアップを行います。
URL は http://<HOSTNAME>:8080/ もしくは https://<HOSTNAME>:8443/です。

GitHub Actions を利用したい場合は、Azure 上のストレージアカウント等クラウドストレージへの接続が必要です。



Tsubasa NomuraTsubasa Nomura

GitHub Actions

制限

GHES では Self-hosted runner のみ利用可能です。

https://docs.github.com/ja/enterprise-server@3.7/admin/github-actions/managing-access-to-actions-from-githubcom/about-using-actions-in-your-enterprise

Self-hosted runner を設定する

GitHub で Self-hosted runner を使う場合と同様です。

GHES のデフォルトに無い(GitHub 上の) GitHub アクションにアクセスする方法

GitHub Connect を使うか、actions-sync を使って手動で同期します。

https://docs.github.com/ja/enterprise-server@3.7/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect
https://docs.github.com/en/enterprise-server@3.7/admin/github-actions/managing-access-to-actions-from-githubcom/manually-syncing-actions-from-githubcom

デフォルトの GitHub Actions は以下の URL からアクセスできます。
http://<HOSTNAME>/orgs/actions/repositories

GitHub Connect の有効化

GitHub Enterprise のサブスクリプションが必要です。

actions-sync で同期

actions-sync は GHES にアクセスできる場所から実行します。

ツールは以下リポジトリからダウンロードできます。
https://github.com/actions/actions-sync

以下はコマンドの実行例です。

./actions-sync sync --cache-dir "cache" --destination-token "<GitHub Enterprise のPersonal Access Token>" --destination-url "<GHEのサーバーURL>" --repo-name "<GitHubのアクション名:同期先のGitHub Enterprise のリポジトリ名>"

例)
tsunomur@vmjumpbox:~/bin$ ./actions-sync sync --cache-dir "cache" --destination-token "ghp_aaaaaaaaaaa" --destination-url "http://ghetest.nomupro.com/" --repo-name "azure/webapps-deploy:tsubasa/webapps-deploy"
pulling azure/webapps-deploy to cache/tsubasa/webapps-deploy ...
fetching * refs for azure/webapps-deploy ...
not using impersonation for the requests 
syncing `tsubasa/webapps-deploy`
Created repo `tsubasa/webapps-deploy`
successfully synced `tsubasa/webapps-deploy`

最終的な GitHub Actions の YAML ファイル

# File: .github/workflows/workflow.yml
name: JavaScript CI

on: [push]

env:
  AZURE_WEBAPP_NAME: tsunomurnodejs  # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: 'myapps'      # set this to the path to your web app project, defaults to the repository root
  NODE_VERSION: '18'                # set this to the node version to use

jobs:
  build-and-deploy:
    name: Build and Deploy
    runs-on: self-hosted <----------- self-hosted を指定する
    steps:
    - uses: actions/checkout@main
    - name: Use Node.js ${{ env.NODE_VERSION }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ env.NODE_VERSION }}
    - name: npm install, build, and test
      run: |
        # Build and test the project, then
        # deploy to Azure Web App.
        npm install
        npm run build --if-present
        npm run test --if-present
      working-directory: 'myapps'
    - name: 'Deploy to Azure WebApp'
      uses: tsubasa/webapps-deploy@v2 <----------- ここに同期した Actions のリポジトリを指定
      with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}