【GitHub Actions】를 도입해 테스트와 배포를 자동화

7962 단어 GitHubActionsGitHub
학습의 출력으로 게시하고 있습니다.
뭔가 지적이 있으면 부탁드립니다.

GitHub Actions란?



GitHub Actions는 GitHub에 있는 리포지토리의 변경을 감지하고 자동으로 테스트를 실행하거나 배포를 해 주는 CI/CD 툴입니다. 퍼블릭 리포지토리에서는 무료로 사용할 수 있다.
테스트 코드를 실행할 때, bundle exec rspec 등 수동으로 명령을 실행할 필요가 있었지만, 그 부분을 자동화할 수 있기 때문에 수고가 줄어, 실행을 잊어 버리는 것도 막을 수 있다.

GitHub Actions 도입



파일 만들기



GitHub Actions는 YAML 구문을 사용하여 이벤트, 작업 및 단계를 정의합니다. 이러한 YAML 파일은 코드 리포지토리의 .github/workflows라는 디렉토리에 저장됩니다.
인용 : 샘플 워크플로 만들기

위에서 .github/workflows 디렉토리에 sample.yml 파일을 만듭니다.
먼저 테스트를 자동화하는 설정을 작성합니다.

.github/workflows/sample.yml
name: Tests and Deproy
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby 2.6.7
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.6.7
        env:
          RAILA_ENV: test
        run: |
          sudo apt-get -yqq install libsqlite3-dev
          bundle install
          bin/rails db:create
          bin/rails db:migrate
          bin/yarn install
          bundle exec rubocop
          bundle exec rspec

파일 구성


on: 부분에서 이벤트를 만듭니다. 이번에는 push시와 pull_request시에 GitHub Actionos가 기동합니다. 분기를 지정할 수도 있습니다.
runs-on: 에서 실행 환경의 OS를 지정합니다.
steps: 이하에 액션이나 커멘드등을 기술해 갑니다.
uses: actions/checkout@v2 커뮤니티 액션을 사용하여 대상 코드를 실행 환경으로 가져옵니다.
uses: ruby/setup-ruby@v1 커뮤니티 액션을 사용하여 Ruby 실행 환경을 준비합니다. with:ruby-version 로 버전을 지정할 수 있습니다. 이번에는 2.6.7로 설정되어 있습니다.
run: 아래에서 실행할 명령을 작성합니다. 이번에는 DB에 sqlite를 사용합니다. 테스트 명령에 bundle exec는 붙이지 않아도 좋을지도 모르지만 균일하게 둡니다.

여기까지의 파일로 리포지토리에 코드가 새롭게 push, pull_request 되었을 때, 테스트가 자동으로 움직여 줍니다.

Heroku 배포 자동화



Heroku Deploy 를 참고로 파일에 추가합니다.

.github/workflows/sample.yml
name: Tests and Deproy
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby 2.6.7
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.6.7
        env:
          RAILA_ENV: test
        run: |
          sudo apt-get -yqq install libsqlite3-dev
          bundle install
          bin/rails db:create
          bin/rails db:migrate
          bin/yarn install
          bundle exec rubocop
          bundle exec rspec
  heroku-deproy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: akhileshns/[email protected]
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: "YOUR APP's NAME"
          heroku_email: "YOUR EMAIL"


작업은 동일한 러너에서 실행되는 일련의 단계입니다. 기본적으로 여러 작업이 포함된 워크플로는 해당 작업을 병렬로 실행합니다. 작업을 순서대로 실행하도록 워크플로를 구성할 수도 있습니다. 예를 들어, 워크플로우에 코드 빌드와 테스트라는 두 개의 순차적인 작업이 있고 테스트 작업을 빌드 작업의 상태에 따라 달라질 수 있습니다. 빌드 작업이 실패하면 테스트 작업이 실행되지 않습니다.
인용구 : 직업

이상으로부터, 테스트와 배치가 디폴트에서는 동시에 실행되어 버리기 때문에 needs: build 로 build 가 성공하면 배포하도록(듯이) 하고 있습니다.

HEROKU_API_KEY를 대상 리포지토리의 환경 변수로 설정해야 하므로 그 쪽도 설정해 둡니다.

이것으로 GitHub Actions 설정이 끝납니다.

GitHub에 Push




이제 자동화된 테스트와 자동화된 배포가 도입되었습니다.

참고



Understanding GitHub Actions
GitHub Action Deploy to Heroku
리포지토리에 암호화된 비밀 만들기
퍼펙트 Ruby on Rails 【증보 개정판】

좋은 웹페이지 즐겨찾기