[GitHub Actions] Go 프로그램 정기 실행

5268 단어 5GitHubActions
Fringe81 어드벤트 캘린더 2020 의 15일째의 기사입니다.

지금까지 무언가의 프로그램을 정기 실행시킬 때는 AWS LambdaAWS CloudWatch 를 사용하고 있었습니다만, GitHub Actions만으로 할 수 있을 것 같다고 생각했기 때문에 해 보았습니다.

GitHub에 샘플 코드을 게시하고 있습니다.

구현



다음과 같은 YAML 파일을 ${root}/.github/workflows 디렉토리에 넣고 ${root}/main.go 에 실제로 처리할 Go 프로그램을 넣습니다.

github/workflows/job.yaml
on:
  push:
  schedule:
    - cron: "*/5 * * * *"

jobs:
  run:
    name: run
    runs-on: ubuntu-latest
    steps:
      # GOPATH等のセットアップ
      - name: Set Up
        uses: actions/setup-go@v2
        with:
          go-version: ~1.15

      # repositoryの中身にアクセスするためにチェックアウト
      - name: Checkout
        uses: actions/checkout@v2

      # 実行
      - name: Run
        run: go run main.go
        env:
          WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}

정의 파일 설정



자세한 내용은 여기
  • on : 워크 플로우를 트리거하는 GitHub 이벤트의 이름
  • 상기 파일의 경우, 리포지토리에 push했을 때와 5분에 1회 이벤트가 발화한다.

  • jobs: 각 job 설정
  • 위 파일의 경우 다음과 같은 작업을 설정했습니다.
  • 설정
  • 리포지토리의 내용으로 이동
  • 실행 (secrets에서 환경 변수에 대입하고 프로그램 측에서는 os.Getenv()로 실제 값을 가져옵니다)



  • 구현시에 빠진 것



    on 설정



    샘플 코드에서는 pushschedule 를 설정했습니다.
    푸시는 모든 브랜치에서 실행되지만 schedule은 기본 또는 기본 브랜치의 가장 가까운 커밋에서 실행되므로 기본 또는 기본 또는 기본 브랜치 이외의 작업에서 작업하는 경우주의가 필요합니다.

    환경 변수 설정



    이번에는 샘플로서 Slack에게 메시지를 보내는 프로그램을 준비했습니다 (Slack에 메시지를 보내는 것만이라면 curl로 좋지만, 이번에는 Go 프로그램을 실행했기 때문에 굳이 Go 프로그램을 준비했다).
    Slack에 메시지를 보내려면 Webhook URL이 필요하지만이 URL과 같이 외부에 게시하지 않으려는 변수를 사용하는 경우 리포지토리의 암호화된 비밀 만들기을 참조하여 환경 변수를 설정하고 os.Getenv() 사용.

    정기적으로 실행할 수 있는 최단 간격은 5분에 1회이며 엄격하게 설정할 수 없다.



    이것은 굉장히 빠졌다.
    디버깅하려고 해서 push하고 10분이 지나도 실행되지 않고 프로그램이 이상한 것일까라고 생각해 시간을 녹여 버렸다,,,

    정기 실행하기 위해서는 cron 구문을 사용한다( 참고 ) 하지만, doc에도 기재가 있는 바와 같이, 5분에 1회보다 짧게 설정할 수 없습니다. 또, 5분에 1회로 설정( */5 * * * * )해도, 5분에 1회 실행되는 것은 아닙니다 (왜? 최대 18분 지연했다).

    감상



    시간을 엄격하게 할 필요가 없는 경우는, 코드의 관리와 cron의 설정을 같은 리포지토리로 실시할 수 있으므로 편리하다고 생각했습니다.
    cron의 시간이 엄격하지 않은 이유를 알고 있다면 알려주십시오.

    참고


  • GitHub Actions 워크플로 구문
  • htps : // / cs. 기주 b. 코 m / 그럼 / f Ree-p-ro m @ st / Ac Chion s / Rep-Rense / Encryp-d-c ts
  • Github actions에서 go mod download, test, lint
  • 좋은 웹페이지 즐겨찾기