Github action
Github action은 깃헙에서 workflow를 자동화해주는 도구다.
테스트 코드 검사, 배포 등을 자동화해준다.
기본적으로는 레포지토리의 .github/workflows에 yml파일을 작성하여 사용한다.
name: GitHub Actions Demo
on: [push]
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v2
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
깃헙 액션 퀵스타트에 있는 예제코드에서 좀 잘라왔다.
name은 Action의 이름,
On
on은 action을 trigger할 이벤트를 의미한다.
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main
pull_request:
branches:
- main
# Also trigger on page_build, as well as release created events
page_build:
release:
types: # This configuration does not affect the page_build event above
- created
이렇게 특정 branch만을 정하거나, pull, page_build 등에 event를 trigger 설정할수 있다.
특정 행동이 아니라 시간으로도 설정할 수 있다.
여기서 사용하는 것이 CRON이다.
기본적으로는 5자리로 이루어져있는데, 순서대로 분/시간/일/월/요일 이다.
1 1 1 * * 이면 매달 1일 1시 1분에 Action을 실행한다!
Cron 시간 계산해주는 곳이 많으니 필요하다면 찾아보자
https://crontab.guru/#0_0_*_*_*
이외에도 여러 trigger들이 있다.
Jobs
workflow는 하나 이상의 job으로 이루어져있고 기본적으로 job들은 병렬로 실행된다.
이 필요하다면 jobs.<job_id>.needs를 통해 표기한다.
각 job들은 runs-on에 명시된 환경에서 실행됨.
여기서는
Explore-GitHub-Actions:
라는 job 하나만 실행된다.
Runs-on
runs-on은 실행될 machine을 정하는 것이고, 여기서는 최신 우분투 리눅스를 사용하였다.
Steps
steps는 task가 실행될 순서를 의미한다.
Name
name은 github에 표시될 현 스텝의 이름을 설정하는 것이다.
Run
run은 말 그대로 커맨드를 실행하는 것이다.
Uses
uses는 재사용 가능한 code 단위를 태스트로 실행하는 것이다. public repository, public Docker 컨테이너 이미지등을 사용할 수 있다.
자주 사용하는 소스로는
- uses: actions/checkout@v2
이는 로컬 레포지토리의 것들에 workflow가 접근할 수 있게 해준다.
- uses: actions/setup-node@v2
말그대로 노드 환경을 설정해주는데, 로컬 캐쉬가 없으면 Node.js를 설치한다.
환경변수 설정
env:
FIRST_NAME: Mona
이런식으로 환경변수를 설정해줄수 있는데, 보여줄수 없는 키라면 레포지토리에 secret에 해당 key,value를 설정한 다음,
TYPE: ${{ secrets.TYPE }}
이런 식으로 설정해줄 수 있다.
Firebase Expected OAuth 2 access token, login cookie or other valid authentication credential. 에러
Firebase에 관한 Github-Action을 설정하는 도중 이런 에러가 발생하였다.
로컬환경에서는 잘 되던 것이 안되어서 당황스러웠는데, 새로 토큰을 발급 받으니 해결되었다.
주로 나오는 내용은
구글 쪽과 환경의 system clock과 docker의 시간이 sync가 아니면 이런 에러가 발생한다. (Github action도 이런 류이기 떄문)
Firebase auth token이 expire되어서 logout하고 다시 login 해주면 해결한다.
왜 새로 토큰을 발급 받으니 정상적으로 작동하는지는 모르겠다.
전자라면 토큰 신규 발급과 무슨 상관이 있는지를 모르겠고,
후자라면 로컬 환경에서도 안 돌아가야할 것 같은데 로컬환경에서는 정상적으로 작동해서.... 정확한 이유는 모르겠다.
동일 이슈를 가진 사람이 밑에 있다.
그래도 예전에는 아무런 지식이 없어 github-action해보려다 실패했는데, 발전한거 같아서 좋다.
https://docs.github.com/en/actions/quickstart
'TIL' 카테고리의 다른 글
TIL 2022-01-03 AWS EC2, RDS, API Gateway, Lambda (0) | 2022.01.04 |
---|---|
TIL 2021-12-29 Github Action Release, __dirname is not defined (0) | 2021.12.29 |
TIL 2021-12-28 SSR 구현,RTK-Query, 프그머 추석 트래픽 (0) | 2021.12.28 |
TIL 2021-12-23 Image Sprite 크기 조절, SSR 구현 (0) | 2021.12.24 |
TIL 2021-12-22 RTK-Query, Image sprite, (0) | 2021.12.22 |