소프트웨어 개발 과정에서 코드 변경 사항이 발생할 때마다 자동으로 빌드 및 테스트를 실행하는 것을 말한다.
이를 통해 개발자는 코드 변경에 대한 피드백을 빠르게 받을 수 있고, 품질이 높은 안정적인 소프트웨어를 개발할 수 있다.
CI를 사용하면 개발자는 코드를 버전 관리 시스템에 커밋할 때마다 빌드 및 테스트가 자동으로 실행되어, 문제가 있는 코드 변경 사항을 빠르게 확인할 수 있다.
이는 개발자들이 더욱 자주 코드를 변경할 수 있게 하고, 코드 변경에 대한 위험을 줄이며, 안정적인 소프트웨어를 더욱 신속하게 개발할 수 있게 한다.
GitHub Actions
는GitHub
에서 제공하는 지속적인 통합(CI) 및 배포(CD) 서비스이다.
GitHub Actions
를 사용하면GitHub
저장소에서 코드 변경 사항이 발생할 때마다 자동으로 작업을 실행하고, 이를 통해 코드 빌드, 테스트, 릴리스 등의 과정을 자동화할 수 있다.
Actions
는 다양한 언어 및 프레임워크를 지원하며, 커뮤니티에서 제공하는 다양한 작업(Action
)도 활용할 수 있다.
자신의 Repository에서 Actions를 선택하고 Docker image를 선택한다. (set up a workflow yourself 로 처음부터 작성해도 된다.)
name: Docker CI
on:
push:
branches: ['main']
pull_request:
branches: ['main']
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build the Docker image
run: docker build --file Dockerfile --tag {test1}/{test2}:{test3} .
- name: Push Docker image to Docker Hub
run: docker push {test1}/{test2}:{test3}
on
: 언제 작업을 실행할지 정의
push, pull_request
: main 브랜치로 push, pull_request 이벤트가 발생하면 작업을 실행
jobs
: workflow에서 수행할 작업을 정의
build-and-deploy
: 작업의 이름을 정의
runs-on
: 운영 체제 환경을 정의
steps
: 하나의 job 안에서 실행되는 단계들을 정의
uses
: Actions에서 제공하는 미리 만들어진 액션을 사용하기 위한 필드
actions/checkout@v3
: GitHub 리포지토리에서 코드를 체크아웃하는 액션 (현재 작업 디렉토리에 GitHub 리포지토리의 최신 소스 코드를 복제)
docker/login-action@v2, with
: with 키워드를 사용하여 Docker Hub 계정 정보를 전달
PASSWORD에 토큰을 넣는 것이 보안상 더 좋습니다. personal access token
run
: jobs 안의 steps에서 실행되는 셸 명령어를 정의
docker build --file Dockerfile --tag {test1}/{test2}:{test3} .
docker build
: Docker 이미지를 빌드하기 위한 명령어--file
또는 -f
: 사용할 Dockerfile 경로를 지정--tag
또는 -t
: 이미지에 태그를 지정{test1}
은 이미지의 레지스트리, {test2}
는 이미지의 이름, {test3}
은 이미지의 버전.
: Dockerfile을 실행하는 데 사용할 현재 디렉토리를 지정docker push {test1}/{test2}:{test3}
FROM node:18.15.0
WORKDIR /usr/src/app
COPY package*json ./
RUN yarn
COPY . ./
EXPOSE 8000
FROM
: 기반이 될 이미지를 정의 (Dockerfile에서 생성할 이미지의 기반이 될 베이스 이미지)
WORKDIR
: 컨테이너 내부에서 작업 디렉토리를 설정 (이후에 실행되는 명령어는 모두 /usr/src/app 디렉토리 내에서 실행)
COPY
: 호스트 파일 시스템에서 Docker 이미지로 파일이나 디렉토리를 복사 (COPY <소스 경로> <대상 경로>)
RUN
: 새로운 레이어에서 명령어를 실행하는 지시자
PORT
: Docker 컨테이너가 실행될 때 해당 컨테이너에서 사용될 포트를 호스트와 연결하도록 지정하는 역할 (docker run 명령어의 -p 옵션과 함께 사용)
main에 push 하고 성공 (블로그 Test는 commit message)
Docker Hub에도 정상적으로 push 되었다.
다음에는 CD(지속적 배포) 구축하기를 포스팅하겠습니다.