3 분 소요

파이프라인(Pipeline)

파이프라인(pipeline)은 물이 흐르는 관을 의미한다. 파이프라인의 시작 지점에 물을 넣으면 파이프라인의 끝까지 물이 자동으로 흐르게 된다. IT 운영 환경의 파이프라인 개념에서는 파이프라인 안에 물 대신에 소스코드가 흘러 간다고 생각하면 된다.

첫 지점에 넣은 소스코드는 파이프라인을 흐르면서 아티팩트로 빌드되고 이 아티팩트가 운영 환경까지 배포된다. 이런 일련의 과정들이 자동화되어서 개발자가 소스코드를 푸시했을 때 배포까지 자동화가 이루어지는 것을 CI/CD 파이프라인이라고 부른다.

CI/CD 파이프라인은 개발자나 운영자, QA 담당자, 테스트 담당자 같은 사람들이 하던 각각의 작업을 자동화시켜서 각각의 환경에 배포까지 자동화하는 것이 목표이다.

CI(Continuous Integration)/CD(Continuous Delivery/Deployment)

일반적으로 애플리케이션이 최종적으로 서비스되기 까지의 과정을 보면 크게 두가지로 나눌 수 있다.

  • 소스 코드를 푸시하고 애플리케이션이나 이미지로 빌드하는 과정
  • 테스트하고 배포하는 과정

큰 프로젝트는 일반적으로 여러 개발자들이 공동으로 개발한다. 그리고 개발자들은 각자 개발한 내용을 한 저장소(github)에 모은(커밋 & 푸시) 후 최종 통합 소스 코드를 실제 운영 환경(운영 server)에 배포한다. 소스 코드를 한 저장소에서 관리하기 위해서는 가각 개발된 소스 코드를 잘 병합해야 한다. 하지만 병합 과정에서 많은 오류가 발생한다. 이는 또 다른 오류를 발생시키는 원인이 된다.

이런 오류를 최소화 할 수 있는 방법은 작은 단위로 커밋하고 푸시하는 방법이다. 큰 기능을 작은 단위로 쪼갠 후 자주 커밋해야 한다. 커밋은 소스 코드의 오류를 잘 찾을 수 있는 방법 중에 하나이다. 그래서 잦은 커밋은 오류를 줄일 수 있다. 오랜시간 개발로 쌓인 소스 코드는 재앙의 시작이 될 수 있다. 이렇게 자주 커밋하고 푸시하는 방식을 CI(Continuous Integration), 지속적인 통합이라고 말한다.

CI(Continuous Integration)는 오류를 줄이고 개발자들이 소스 코드 병합에 적은 시간을 사용하는데 유용하다.

이후 테스트하고 배포하는 과정을 자동화 하는 방법을 CD(Continuous Delivery/Deployment), 지속적인 배포라고 말한다. 실제 환경에 아티팩트를 배포하는 단계이다.

CI/CD 파이프라인을 구성하면 이 전체 전체 과정을 자동화 할 수 있다.

Github Actions

GitHub Actions은 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼이다. GitHub Actions은 자동화된 프로세스를 워크플로(workflow) 형태로 정의하여 빌드, 테스트, 배포 등의 작업을 수행합니다.

워크플로(workflow)는 CI/CD 파이프라인에서 작업을 실행하는 자동화된 프로세스로, 파이프라인의 실행 계획을 의미한다. 워크플로는 .github/workflows 디렉터리에 YAML 파일로 정의된다.

워크플로(workflow)는 작업 실행 환경인 “실행기(runner)”위에서 살행된다. runner의 환경은 크게 “GitHub 호스팅 실행기(GitHub-hosted runners)”“자체 호스팅 실행기(self-hosted runners)”로 구분됩니다. “GitHub-hosted runner”는 GitHub에서 제공하는 실행 환경을 의미하고, “self-hosted runner”는 사용자가 직접 설정한 실행 환경을 뜻합니다

GitHub Actions는 퍼블릭 리포지토리에서 표준 GitHub-hosted runners 및 self-hosted runners를 제한 없이 무료로 이용할 수 있다. 단 프라이빗 레포지토리는 사용량에 따른 비용이 청구된다.

GitHub 호스팅 실행기(GitHub-hosted runners) GitHub에서 제공하는 가상 머신으로, 워크플로를 실행할 수 있는 환경이 미리 구성되어 있습니다. 운영 체제 지원: Linux, Windows, macOS 사전 설치된 도구: 다양한 프로그래밍 언어, 빌드 도구, 패키지 관리자 등이 미리 설치되어 있어 즉시 사용 가능합니다. 자동 관리: GitHub에서 유지 관리하며, 각 작업마다 깨끗한 환경이 제공됩니다. 사용 편의성: 추가 설정 없이 바로 사용 가능하므로 간단하고 빠르게 워크플로를 운영할 수 있습니다.

GitHub 호스팅 실행기는 워크플로를 실행하기 위해 필요한 환경을 미리 구성하여 제공합니다. 예를 들어, 도커 이미지를 빌드하려면 도커가 설치된 환경이 필요합니다. GitHub 호스팅 실행기는 이러한 요구를 충족하기 위해 도커가 사전 설치된 가상 머신을 제공합니다. 따라서, 워크플로에서 추가적인 설정 없이도 도커를 바로 사용할 수 있습니다.

GitHub 호스팅 실행기는 Ubuntu Linux, Windows, macOS 운영 체제를 지원하며, 각 운영 체제별로 다양한 도구와 패키지가 미리 설치되어 있습니다. 이러한 환경을 통해 사용자는 복잡한 설정 없이도 다양한 작업을 수행할 수 있습니다.

워크플로 파일을 작성할 때 필요한 환경을 명시적으로 지정하는 것이 중요합니다. GitHub 호스팅 실행기는 다양한 운영 체제와 도구를 지원하므로, 워크플로의 요구 사항에 맞는 환경을 선택하여 설정하면 됩니다.

GitHub Actions에서 워크플로를 정의할 때, runs-on 키워드를 사용하여 작업이 실행될 기본 운영 체제 환경을 지정하고, uses 키워드를 통해 필요한 액션을 명시하여 추가 도구나 기능을 활용할 수 있습니다. runs-on은 각 작업이 실행될 환경을 지정하는 데 사용됩니다. uses는 특정 액션을 호출하여 워크플로의 단계를 구성하는 데 사용됩니다. 액션은 미리 정의된 작업의 집합으로, 코드 체크아웃, 빌드, 테스트 등 다양한 기능을 수행할 수 있습니다. useGithub Marketplace에 정의되어 있는 Actions를 사용할 수 있다.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository code
        uses: actions/checkout@v3
      # 다른 작업 단계들

자체 호스팅 실행기(self-hosted runners) 자체 호스팅 실행기는 GitHub에서 제공하는 대신, 사용자가 직접 관리하는 서버나 컴퓨터에 실행기 소프트웨어를 설치하여 워크플로를 실행하는 방식입니다.

환경 제어: 하드웨어, 운영 체제, 소프트웨어 도구 등을 사용자의 필요에 맞게 구성할 수 있습니다. 특수 요구 사항 대응: 특정 하드웨어나 네트워크 환경이 필요한 작업에 적합합니다. 비용 관리: 자체 인프라를 활용하므로, 추가 비용 없이 실행기를 운영할 수 있습니다. 유지 관리 책임: 시스템 업데이트, 보안 패치, 실행기 애플리케이션 관리 등을 사용자가 직접 수행해야 합니다.

댓글남기기