4
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-05-30

前半の記事

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

ゴール

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

name: deploy-github-actions
# トリガーの設定
on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest # 実行環境の設定
    steps:
      - name: ssh and deploy
        uses: appleboy/ssh-action@master # 1
        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

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

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

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

  • ホスト名 => 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で繋いでくれる。
実はパスフレーズの設定がなくてハマって、十数回もプッシュして試してしまったのは内緒w

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

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

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

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

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

21444e88-f06a-414c-a3d8-cd9268b62625.png

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1