GitHub Actions を使用してデプロイ(サーバに入ってpull)するまでやってみた(後半戦) 

前半の記事
* https://qiita.com/caesar2015/items/923a32648880097a3797

前半で基本を学んだので、いよいよ、弊社のコーポレートサイトのデプロイに調整します！

* 参考ページ
https://softwarenote.info/p3789/
https://github.com/appleboy/ssh-action/issues/16
✴パスフレーズの設定がなかったので、デプロイに失敗していてハマった際に上記を参考にしました。

## ゴール
akipass-corporateプロジェクトは静的ページのコーポレートサイトであり、すでにGitHubの管理下にあることが前提で作業を進めますので、GitHubへの登録は省略しています。

* 前提条件
現状はローカルからSSHで秘密鍵を使ってSSHでサーバに接続できて、サーバに.gitが設定されているので、手動でpullしてデプロイは行うことができる。
したがって、サーバの公開鍵はGitHubのDeploy　Keyに設定されている。

_2次ゴール(次回)_
1. 弊社のコーポレートサイト(静的HTML)のソースをGitHub上のmasterブランチをプッシュ
2. GitHub Actionsでプッシュを検知し、workflowsを起動
    * GitHubに登録された本番サーバの秘密鍵とアクセス情報からSSHで本番サーバにアクセス
    * 本番サーバーに入ったら、cdでgitの管理下のソースの場所に移動
    * masterブランチをチェックアウト
    * masterブランチをプル
3. 本番環境のコーポレートサイト(静的HTML)が変更される

## ymlファイルの設定
練習用の「learn-github-actions.yaml」は削除して、デプロイ用のymlを作る。

.github/workflows/deploy-github-actions.yml

```yml
name: deploy-github-actions
# トリガーの設定
on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest # 実行環境の設定
    steps:
      - name: ssh and deploy
        uses: appleboy/ssh-action@master # １
        with: # 2 アクションの入力パラメータを指定
          host: ${{ secrets.SSH_HOST }} # ホスト名
          username: ${{ secrets.SSH_USERNAME }} # SSH ユーザ名
          key: ${{ secrets.SSH_PRIVATE_KEY }} # 秘密鍵の内容
          port: ${{ secrets.SSH_PORT }} # ポート番号
          passphrase: ${{ secrets.SSH_PASSPHRASE }} # パスフレーズ
          debug: true
          script: |
            cd /xxx/xxx/xxx/xxx #ここは本当はgitの管理下のソースの場所
            git checkout master
            git pull origin master

```

## Deploy keyを設定（前提条件より設定済みである）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669217/0e3b351b-bd6d-01db-462c-941d2ba7c081.png)

すでにプロジェクトにサーバの公開鍵が設定されていること確認する。
設定されていない場合は下記のサイトをみて公開鍵、秘密鍵を作成してください。

* https://qiita.com/tamorieeeen/items/c24f8285448b607b12dd

## secretを設定する

パスフレーズや秘密鍵などは見せないようにしたいので
${{ secrets.XXXX }}
の箇所のように表示させたくない箇所をSecretに登録して環境変数をして使うことができます。
✴秘密鍵がない場合は上の参考URLから作成してください。

githubのprojectのsetting > secrets から登録する

```
https://github.com/$user/$project/settings/secrets
```

![screencapture-github-caesar2015-akipass-corporate-settings-secrets-actions-2023-05-30-18_05_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669217/b1d31130-7f57-5472-3518-6175c20ccd55.png)

僕の場合は下記を環境変数に設定しました。

* ホスト名 => secrets.SSH_HOST
* SSH ユーザ名 => secrets.SSH_USERNAME
* 秘密鍵 => secrets.SSH_PRIVATE_KEY
* ポート番号 => secrets.SSH_PORT
* パスフレーズ => secrets.SSH_PASSPHRASE

## 簡単なymlファイルの説明
ymlファイルについては前半戦で説明はしているので、ここでは簡単に

```
uses: appleboy/ssh-action@master
```
これはsshで繋いでくれるアクションみたいでwithのところにSSHにつなげるための各パラメータを設定するとsshで繋いでくれる。
実はパスフレーズの設定がなくてハマって、十数回もプッシュして試してしまったのは内緒ｗ

```
script: |
    cd /XXX/XXX/XXX/XXX
    git checkout master
    git pull origin master
```

なんとなく分かると思いますが、下記をやってGitHubからソースをプルしています。

* cdでgitの管理下のソースの場所に移動
* masterブランチをチェックアウト
* masterブランチをプル

## 最後にソースがデプロイされるかを確認

ソースを変更して、SourceTree(gitのコマンドではも良いけど、、、)からmasterにPushして
下記のようにGitHub　Actionsのworkflowsが緑になれば成功

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669217/7fc35da1-2b12-14e5-5e34-939089dbc29d.png)

本番のURL
https://www.cae-sar.co.jp/
にアクセスして変更されていればOK

## お疲れ様でした。最後に感想

簡単にできるよと言われてやってみましたが、パスフレーズの部分を入れてなかったのでハマってしまいました。
十数回もプッシュしてしまい、Gitの履歴が汚れてしまいました(T_T)

とりあえず、workflowsのタブには出ていたみたいたけど、気がつかなかったので、エラーになるとやっかいそうですが、AWS CodePipelineを使ってCI/CDを実現していたエンジニアの方はこちらの方が簡単そうだねという感想を頂いて、まあ、これからもGitHubはデファクトスタンダードであるため、こちらを使っていこうと思います。

![21444e88-f06a-414c-a3d8-cd9268b62625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669217/ce827fee-bade-1452-25a9-59d6d654a234.png)