ChinoDuino(Chino × Arduino)

自発性のないプログラマーがArduinoと出会って悪戦苦闘する様を綴っていく⇒今はいろいろ(^^;

Github Actionsでワークフローを作成してAWS SAMでデプロイしてみる

Github Actionsでワークフローを作成して、AWS SAMへデプロイしてみます💻

今回のポイントとしては

  • テストが通ったらデプロイする
  • branchごとデプロイ先が違う

今回、「jobs.<job_id>.if」 で、デプロイ先をかえるようにしました。Github Actionsは今回使うのが初めてで、もし他によい方法あれば、ぜひ、教えてもらいたいです!🙏

やること

  • リモートリポジトリへのPUSH時に実行
  • テストは全branchで実行
  • テストが通ったらデプロイを行う
    • デプロイはbranchごと、デプロイ先をかえる

環境

構築

まずはテスト部分を作成

これは、Github Actionsのサンプロから作成しました。

「Actions」⇒「New workflow」⇒「Python application」を選択

f:id:chinoppy:20200211192956p:plain:w600

commitすれば、これで完成!簡単😁

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.6
      uses: actions/setup-python@v1
      with:
        python-version: 3.6
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -e .
        pip install -e .[testing]
    - name: Lint with flake8
      run: |
        pip install flake8
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Test with pytest
      run: |
        python -m pytest -v
        python -m pytest --cov=oc

デプロイのステップを追加

次にデプロイステップを追加していきます

まずは、テスト(「build」ステップ)が通ったらデプロイを実行したいので、「needs」を追加

これで、テストが通ったら、このdeployステップが実行されるようになります

  deploy:

    needs: build

次にAWS SAMの実行に必要なライブラリ等をインストール

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.6
      uses: actions/setup-python@v1
      with:
        python-version: 3.6
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install awscli
        pip install aws-sam-cli

これで、AWS SAMを実行する環境ができので、次にbranchごとのデプロイを実行します

    - name: Configure AWS credentials for prod
      if: startsWith(github.ref, 'refs/heads/master')
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }}
        aws-region: ap-northeast-1
    - name: deploy to prod
      if: startsWith(github.ref, 'refs/heads/master')
      run: bash deploy.sh
      shell: bash

↑はmasterへpushしたときに実行されます

デプロイに必要なキーの設定を「Configure AWS credentials for prod」のjobで行い、デプロイをするシェルの実行を「deploy to prod」のjobで行っています

各jobにある、↓のifが満たされた場合、jobが実行されます

if: startsWith(github.ref, 'refs/heads/master')

これで、yamlの準備はOK❗

あとは、AWSのアクセスキー、シークレットキーをシークレット変数に設定します

f:id:chinoppy:20200211194150p:plain:w500

実行

各branchごとの実行結果はこちら

master

「master」へのPUSH時にprod(本番)環境へデプロイします

デプロイテスト(develop→master) (#2) · peacemaker07/sam_app_sample@6e7bed2 · GitHub

以下の本番へのデプロイのjobのみ実行されています!👏

  • Configure AWS credentials for prod
  • deploy to prod

f:id:chinoppy:20200211195041p:plain:w500

develop

「develop」へのPUSH時にstg(ステージング)環境へデプロイします

デプロイテスト(feature→develop) (#1) · peacemaker07/sam_app_sample@8d7cca1 · GitHub

ステージングへのデプロイステップはこちら

  • Configure AWS credentials for stg
  • deploy to stg

開発ブランチ

「feature/*」へのPUSH時にdev環境へデプロイします

mod flows · peacemaker07/sam_app_sample@6199004 · GitHub

dev環境へのデプロイステップはこちら

  • Configure AWS credentials for dev
  • deploy to dev

アクションも自作できるようなので、またやってみたいと思いますー😃