• システム開発に関わる内容をざっくりと書いていく

GitHubActions 一例(Laravelアプリケーション)

下記Laravelアプリケーションのデプロイ例:

ざっくり下記の手順

1、githubActionsのIPアドレス取得

2、Azureへログイン(Credentials使用)

3、デプロイ先マシンのセキュリティグループルールを作成してgithubActionsマシンからSSH接続できるようにする

4、SSH接続

5、githubに接続してチェックアウトしてくる

6、Laravelアプリケーション起動用のコマンドを実行する

7、3で作成したデプロイ先マシンのセキュリティグループルールを削除する

name: deploy
on:
  # developブランチプッシュ時
  push:
    branches: [develop]
  workflow_dispatch:
jobs:
  deploy:
    # ubuntu-latestで
    runs-on: ubuntu-latest
    steps:
      # githubActions実行マシンのIP取得
      - name: Public IP
        id: ip
        uses: haythem/public-ip@v1.2
      # Azureのログイン
      - name: Azure Login
        uses: azure/login@v1
        with:
          creds: ${{ secrets.CREDENTIALS }}
      - uses: actions/checkout@v2
      # デプロイ
      - name: Deploy
        # 環境変数系のセット、secretsから
        env:
          HOST_NAME: ${{ secrets.HOST_NAME }}
          SSH_KEY: ${{ secrets.SSH_KEY }}
          SSH_PORT: ${{ secrets.SSH_PORT }}
          USER_NAME: ${{ secrets.SSH_USER_NAME }}
          SUBSCRIPTION_NAME: ${{ secrets.SUBSCRIPTION_NAME }}
          RESOURCE_GROUP_NAME: ${{ secrets.RESOURCE_GROUP_NAME }}
          SECURITY_GROUP_NAME: ${{ secrets.SECURITY_GROUP_NAME }}
          SECURITY_GROUP_RULE_NAME: ${{ secrets.SECURITY_GROUP_RULE_NAME }}
        run: |
          # GitHubのパブリックIPを取得
          IP_ADDRESS=`echo ${{ steps.ip.outputs.ipv4 }}`
          # セキュリティーグループにGitHubのパブリックIPを割り当てSSH通信を許可する
          az network nsg rule create -g ${RESOURCE_GROUP_NAME} -n ${SECURITY_GROUP_RULE_NAME} \
          --subscription "${SUBSCRIPTION_NAME}" \
          --nsg-name ${SECURITY_GROUP_NAME} \
          --priority 999 \
          --source-address-prefixes ${IP_ADDRESS}/32 \
          --destination-address-prefixes '*' \
          --destination-port-ranges ${SSH_PORT} \
          --access Allow \
          --description "allow ssh from github"
          # SSH接続、デプロイ、一度src下でクローンし、GitHubとの接続情報を保持ている必要がある 
          # Laravelアプリケーションのため下三行は起動用のコマンド(とマイグレーション実行)
          echo "$SSH_KEY" > private_key && chmod 600 private_key
          ssh -p ${SSH_PORT} -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOST_NAME} '
          cd /var/www/src &&
          git checkout develop &&
          git pull &&
          composer install &&
          composer dump-autoload &&
          php artisan migrate
          '
          # セキュリティーグループにGitHubのパブリックIPを割り当て解除(作成したルールを削除)
          az network nsg rule delete -g ${RESOURCE_GROUP_NAME} -n ${SECURITY_GROUP_RULE_NAME} \
          --subscription "${SUBSCRIPTION_NAME}" \
          --nsg-name ${SECURITY_GROUP_NAME}