[GitHub Actions] Go 프로그램 정기 실행
5268 단어 5GitHubActions
지금까지 무언가의 프로그램을 정기 실행시킬 때는 AWS Lambda 과 AWS 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 }}
정의 파일 설정
자세한 내용은 여기
os.Getenv()
로 실제 값을 가져옵니다) 구현시에 빠진 것
on 설정
샘플 코드에서는
push
와 schedule
를 설정했습니다.푸시는 모든 브랜치에서 실행되지만 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의 시간이 엄격하지 않은 이유를 알고 있다면 알려주십시오.
참고
Reference
이 문제에 관하여([GitHub Actions] Go 프로그램 정기 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kakke18/items/f9bb5df9475d90c0ff33텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)