CI (Continuous Integration - 지속적 통합)
코드 버전 관리를 하는 VCS 시스템(Git, SVN ...)에 푸시가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정
CD (Continuous Deployment - 지속적 배포
빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정
일반적으로 CI만 구축되어 있지는 않고, CD도 함께 구축된 경우가 대부분이다.
우리가 주의할 점이 있다.
💥단순히 CI 도구를 도입했다고 해서 CI를 하고 있는 것이 아니다.💥
마틴 파울러의 블로그를 참고하면 CI에 대해 4가지 규칙을 이야기한다.
여기서 특히 중요한 것은 테스팅 자동화이다.
지속적으로 통합하기 위해서는 무엇보다 이 프로젝트가 완전한 상태임을 보장하기 위해 테스트 코드가 구현되어 있어야만 한다.
CI/CD를 지원하는 대표적인 도구는 다음과 같다.
이 중 Travis CI, Jenkins CI 또한 고려해보았지만 유료 문제로 사용하지 않았다.
Jenkins CI는 호스팅을 직접 해야 하기 때문에 추가적인 서버 비용이 들며, Travis CI는 원래 무료였지만, 최근에 100000크래딧만 무료로 변경되었다.
Github에서 제공하는 워크플로우(workflow)를 자동화하도록 도와주는 도구이다.
테스트, 빌드, 배포 등 다양한 작업들을 자동화하여 처리한다.
./github/workflows
폴더 아래에 저장됨.yml
파일을 직접 추가하여 등록할 수도 있다.1) 코드 작성
2) Workflow 정의
3) 정상 작동하는지 Test
Github 저장소에서 Actions > set up a workflow yourself
로 간단한 workflow를 생성할 수 있다.
아래 예시는
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Runs a single command using the runners shell
- name: Run a one-line script
run: echo Hello, world!
# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
name
: Workflow의 이름을 지정on
: Event(어떤 조건에 Workflow를 Trigger 시킬지)에 대해 작성하는 부분on: [pull_request, issues]
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
job
: Workflow는 다양한 작업으로 구성되며, 여러 job이 있을 경우 Default로 병렬 실행된다.build
: job을 생성하고, 아래에 2개의 steps이 존재하는 구조runs-on
: 어떤 OS에서 실행될지 지정uses
: 어떤 액션을 사용할지 지정하며, 이미 만들어진 액션을 사용할 때 지정# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Runs a single command using the runners shell
- name: Run a one-line script
run: echo Hello, world!
# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
https://meetup.toast.com/posts/286
https://zzsza.github.io/development/2020/06/06/github-action/