下記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}