GCP 무료 크레딧을 다 써버려서 토이프로젝트에서 사용하던 Jenkins 서버를 이전해야하는 상황이 왔다.
NCP 에서 제공하는 크레딧도 있지만 추후 개발서버도 NCP 로 이전할 생각이라 크레딧이 모자랄 것 같다.
무료로 사용가능한 Github Actions 으로 옮기자
public repository 에 대해서는 무료이다.

워크플로는 하나 이상의 작업을 실행하는 구성 가능한 자동화 프로세스. yaml 로 정의 된다. repostiroy 에 event 가 trigger 될 때 실행된다. 수동으로 trigger 시킬 수 도 있고, 정해진 스케쥴로도 할 수 있다.
리포지토리안의 .github/workflow 에 정의한다. 여러개의 workflow 가실 수 있고, 각각 서로 다른 일련의 테스크들을 실행할 수 있다.
예를들어, 빌드 그리고 pr 를 테스트하는 workflow , release 가 만들어 질때마다 application 에 배포하는 workflow 각각 둘 수 있다. 또 새로운 이슈룰 열때마다 라밸을 날도록 하는 workflow 도 있다.
worklfow 실행을 트리거 하는 특별한 activitiy 이다. 말 그대로 이벤트이다. pr 을 보내거나 이슈를 열거나, 누군가 repo 에 commit push 를 날리거나 하는 것 모두 event 의 일종이다.
api 를 통해서 수동으로 또는 스케쥴 단위로 workflow 를 트리거 할 수 있다.
사용가능한 event 는 정말 많다
https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows
굉장히 많은 데 개인적으로 자주 사용할 만한 것들은
push, pull_request 정도 인 것 같다 !
workflow 를 실행하는 서버 각 runner 는 한번에 하나의 job 을 실행할 수 있다.
Github 에서는 Ubuntu Linux, Window, MacOS runner 를 제공하고 있다. 각 workflow 은 fresh, newlty-provisoned vm 에서 실행된다. 즉 workflow 끼리는 완전히 다른 vm 에서 새롭게 실행된다는 뜻이다!
참고로 runner 를 Github 에서 제공하는 게 아니라 Self-hosted runners 도 제공하고 있다.
여러개의 step 으로 구성되어 있다. 하나의 runner 에는 하나의 job 이 존재한다.
그리고 각 step 은 실행될 수 있는 shcell script 이거나, action 일 수 있다. action 은 workflow 를 단순화 시켜 놓은 extention 이다.
그리고 job 에 있는 각 step 은 같은 runner 에서 실행되고, step과 step 끼리는 데이터를 공유할 수 있다. 다른 job 들간의 의존성을 설정할 수 있다!. 가령 Job1 이 실행되고 나서 Job2 가 실행된다거나 등등을 설정할 수 있다. 기본적으로는 각 job은 어떤 의존성을 가지고 있지 않고 병렬적으로 실행한다.