GitHub Actions는 빌드, 테스트, 배포에서 필요한 파이프라인을 자동화하는 CI/CD 플랫폼이다.
GitHub Actions는 단순한 DevOps를 넘어서, 이밴드 발생시 workflow를 실행할 수 있는데, 이벤트 단위로 동작하기 때문에 issue 발생시 label 지정을 자동화하는 등 다양하게 사용될 수 있다.
GitHub은 Linux, Windows, MacOS 가상머신을 제공하며 이 머신 위에서 우리가 지정한 workflows가 동작하며 고유의 데이터 센터 혹은 클라우드 인프라와 연동하여 러너를 동작시킬 수 있는 아주 편리한 서비스다!
GitHub Actions은 repository에서 event 발생시 등록된 workflow를 실행한다. workflow는 우리가 여러개의 jobs(작업 단위)를 가지고 있으며 병렬 혹은 직렬적으로 실행된다. 각 job은 머신(Runner) 혹은 컨테이너 내부에서 동작하며 등록한 step에 따라 순차적으로 script를 실행하는 원리다.
workflow는 자동화 프로세스를 설정하는 단위다. YAML 파일로 정의한다. 이벤트 방생시, 지정한 스케쥴링에 따라 혹은 임의로 실행시킬 수 있다.
하나의 repository 안에 여러 workflow를 지정할 수 있으며 각각은 별개의 프로세스로 job을 실행한다. workflow를 임포트하여 실행시킬 수 있기 때문에 재활용도 가능하다.
workflow를 실행하는 특수한 행위가 Event다. PR, Issue, Push 등 github에서 발생하는 모든 행위를 Event로 정의할 수 있다. 덧붙여, REST API를 통해 스케쥴링도 가능하다.
job은 step을 그룹화한 단위다. 각 step은 shell script 혹은 action 중 하나다. step은 job에 등록된 순서대로 실행되며 서로 의존성을 지닌다.
각 Job의 단위는 독립적인 환경에서 수행되기 때문에 서로 의존성이 없다고 볼 수 있는데, 의존하도록 설정할 수 있다. 예를들어 서로다른 아키텍쳐를 테스트하기 위해 각 Build job이 의존성 없이 실행되도록 설정할 수 있고, Packaging job은 의존하도록 설정할 수 있다. 이 때, Build job이 병렬로 실행되어 모두 성공하게 되면 Packaging job을 실행한다.
workflow 내에서 복잡하고 반복되는 작업을 수행하기 위한 별도의 어플리케이션이다. Javascript, Docker 등의 문법으로 작성할 수 있으며, workflow이 실행될 때 필요한 action을 다운받는다. 이 때 Action 코드를 실행하는 데 필요한 패키지를 포함해야 한다.
runner는 workflow를 실행하는 서버를 지칭한다. 각 runner는 한번에 한개의 job을 실행할 수 있다. GitHub는 Ubuntu Linux, Microsoft Windows, macOS runner를 제공한다. 그 외 가상 머신이 필요하다면 직접 runner를 설계하여 그 머신위에서 동작하도록 지정할 수 있다.