何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

[メモ] Goで作成したアプリをGitHub Actionsを使ってHerokuへデプロイする。

最近、個人で作成したアプリをHerokuへデプロイした時のメモです。

github.com

とりあえず手動デプロイの手順もメモする。

温かみのある手動デプロイ

基本的には以下の手順に書かれた通り。

devcenter.heroku.com

ハマるポイントしては ビルドコンテキストが常に Dockerfile​ が格納されているディレクトリに設定され、個別に構成できないこと。 今回のheroku.ymlは以下のようになった。

build:
  docker:
    web: Dockerfile
run:
  web: /web-service-gin
git add heroku.yml
git commit -m "Add heroku.yml"
heroku stack:set container
git push heroku main

git push heroku main をしたらDockerのbuildが始まる。

f:id:s-takaya1027:20220409195258p:plain

GitHub Actionsを使ってHerokuへデプロイ

github.com

Deploy to HerokuというActionを使った。

基本的にはREADMEに書いてある通り。testというjobの後に起動させたいので needs: testという記述を追加した。

走らせるとこんな感じ f:id:s-takaya1027:20220409200714p:plain

  deploy:
    name: deploy
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: deploy
        uses: akhileshns/heroku-deploy@v3.12.12
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name:  ${{secrets.APP_NAME}}
          heroku_email:  ${{secrets.HEROKU_EMAIL}}
          usedocker: true

heroku logs -t でデプロイできていることが確認できる。

f:id:s-takaya1027:20220409201838p:plain

www.takayasugiyama.com

ファイル全体は以前書いたCIの設定も含めると以下のようになる。

name: Gin API
on:
  push:
    branches:
      - main
jobs:
  test:
    name: test
    runs-on: ubuntu-latest
    services:
      gin_service_db:
        image: mysql:8.0
        ports:
          - 3306:3306
        env:
          MYSQL_USER: ginuser
          MYSQL_PASSWORD: password
          MYSQL_DATABASE: gin-service
          MYSQL_ROOT_PASSWORD: password
          MYSQL_HOST: gin_service_db
    steps:
    - uses: actions/checkout@v2
    - name: Set up Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.17.7
    - name: Install golang-migrate CLI
      run: |
        curl -L https://packagecloud.io/golang-migrate/migrate/gpgkey | sudo apt-key add -
        echo "deb https://packagecloud.io/golang-migrate/migrate/ubuntu/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/migrate.list
        sudo apt-get update
        sudo apt-get install -y migrate
    - name: Run Migration
      run: migrate -database="mysql://ginuser:password@tcp(localhost:3306)/gin-service" -path "./db/migrations" --verbose up
    - name: Build
      run: go build -v ./...
    - name: Test
      run: TEST_CLIENT=CI bash -c 'go test ./... -v'
  deploy:
    name: deploy
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: deploy
        uses: akhileshns/heroku-deploy@v3.12.12
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name:  ${{secrets.APP_NAME}}
          heroku_email:  ${{secrets.HEROKU_EMAIL}}
          usedocker: true