GitHub ActionsでPivotal Web Serviceに自動デプロイする

Dev/CI/GitHubActions
Pivotal Application Service
Cloud Foundry
GitHub Actions

更新日時 : 2022/05/29 15:51
投稿日時 : 2020/05/31 08:25

前にConcourse CIで構築したCIパイプラインをGitHub Actionsで構築し直す。
移行する理由は、AWSで構築したConcourse CIの費用削減というものだ。月額600円程度だが、かなり安めのCPU設定のため、実行しすぎると月末にはCIがまともに動かせない。
それとGitHub Actionsをまだ触ったことがなかったため、どんなものか触ってみたかった。今の会社だとJenkinsを利用しているチームが多く、そっちも勉強したかったが、GitHub Actionsはパブリックリポジトリだと無料のため、結局費用面を重視した。

実施したこと

  • masterブランチにpushがあったとき、テストを実行する
  • Pivotal Web Serviceに最新のソースコードをデプロイする

設定

リポジトリのタブにActionsからJava with Mavenのテンプレートをまず引っ張ってきて、それを思考錯誤した。Concourse CIと同様にymlファイルで設定するため、割とすんなり理解できた。
Mavenでのビルド部分はmakingさんのリポジトリを参考にさせていただいた。
Pivotal Cloud Foundryへのデプロイはマーケットプレイスのものを利用した。似たパイプラインは結局既存のものを参考にするので、CIを共有できるのは便利だと思う。ただ環境変数やコマンドの設定の仕方を理解するのに時間がかかった。

secure information

パスワードなどの認証情報はどうするの?と思ったので、調べたところリポジトリの設定に環境変数が設定ができるようだ。
ymlファイル内で${{ secrets.CF_USERNAME }}で参照できる。

GitHub Secrets

最終的な設定ファイル

https://github.com/vagivagi/blog-api/blob/master/.github/workflows/ci.yml

name: Deploy to Pivotal Web Services

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-java@v1
      with:
        java-version: '1.8'
    - uses: actions/cache@v1
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-maven-
    - name: mvn test
      run: |
        set -e
        ./mvnw -V test
    - name: mvn package
      run: |
        set -e
        ./mvnw -V package -DskipTests=true
    - name: Pivotal Cloud Foundry (PCF) CLI
      uses: d3sandoval/cloud-foundry-action@1.1.1
      with:
        args: 'push blog-api'
      env:
        CF_USERNAME: ${{ secrets.CF_USERNAME }}
        CF_PASSWORD: ${{ secrets.CF_PASSWORD }}
        CF_TARGET_ORG: ${{ secrets.CF_TARGET_ORG }}
        CF_TARGET_SPACE: ${{ secrets.CF_TARGET_SPACE }}
        BLOG_GITHUB_ACCESS_TOKEN: ${{ secrets.BLOG_GITHUB_ACCESS_TOKEN }}
        BLOG_GITHUB_WEBHOOK_SECRET: ${{ secrets.BLOG_GITHUB_WEBHOOK_SECRET}}

感想

  • CIをマーケットプレイスから利用できるのは便利
  • マーケットプレイスのREADMEを読んでも記法が途中で変わった?せいか引数や環境変数の設定は少し調べる必要があった。
  • 無料助かる

まだできていないこと

  • 他のクラウドサービスへのデプロイ
    • 次はblog-uiでHerokuを試したい
  • プルリクエスト作成時のテスト実行とエラーチェック
  • SlackやLINEなどへの通知