GitHub Actions에서 개발 작업을 자동화하는 방법

완료됨

여기에서는 GitHub Actions 및 워크플로를 소개합니다. 사용 가능한 작업 유형과 작업을 찾을 수 있는 위치를 알아봅니다. 또한 작업 유형의 예를 들고 워크플로에 맞추는 방법을 살펴봅니다.

GitHub는 구상부터 배포까지 걸리는 시간을 단축합니다.

GitHub는 개발자와 DevOps 엔지니어 팀이 신속하게 애플리케이션을 빌드하고 배포할 수 있도록 설계되었습니다. GitHub에는 이를 가능하게 하는 수많은 기능이 있지만 일반적으로 다음 두 범주 중 하나에 속합니다.

  • 소통: 끌어오기 요청의 코드 검토, GitHub 문제, 프로젝트 보드, wiki, 알림 등 GitHub를 통해 개발자 팀이 소프트웨어 개발 프로젝트에 대해 쉽게 소통할 수 있도록 하는 모든 방법을 고려합니다.
  • 자동화: GitHub Actions 통합에서 제공, 배포에 이르기까지 소프트웨어 개발 프로세스의 모든 단계에서 워크플로를 자동화할 수 있습니다. 끌어오기 요청에 레이블을 추가하고 부실한 문제 및 끌어오기 요청을 확인하는 것을 자동화하지 않도록 합니다.

이러한 기능을 함께 사용하면 수천 개의 개발 팀이 초기 구상부터 배포까지 걸리는 시간을 효과적으로 단축할 수 있습니다.

워크플로 자동화를 사용하여 개발 시간 단축

이 모듈에서는 자동화를 집중적으로 검토하므로 팀이 자동화를 사용하여 일반적인 개발 및 배포 워크플로를 완료하는 데 걸리는 시간을 단축하는 방법을 간단하게 살펴보겠습니다.

코드가 작성된 이후 용도에 맞게 안정적으로 사용되기 전에 수행해야 하는 모든 작업을 고려합니다. 조직의 목표에 따라 다음 작업 중 하나 이상을 수행해야 할 수 있습니다.

  • 코드가 모든 단위 테스트를 통과하는지 확인
  • 코드 품질 및 규정 준수 검사를 수행하여 소스 코드가 조직의 표준을 충족하는지 확인
  • 코드 및 해당 종속성에서 알려진 보안 문제 확인
  • (잠재적으로) 여러 기여자의 새 소스를 통합하는 코드 작성
  • 소프트웨어가 통합 테스트를 통과하는지 확인
  • 새 빌드 버전 지정
  • 적절한 파일 시스템 위치에 새 이진 파일 제공
  • 하나 이상의 서버에 새 이진 파일 배포
  • 이러한 작업 중 하나라도 통과하지 못하는 경우 적절한 담당자나 팀에 문제를 보고하여 해결합니다.

문제는 이러한 작업을 안정적이고 일관성 있게, 지속 가능한 방식으로 수행하는 것입니다. 이는 워크플로 자동화에 적합한 작업입니다. GitHub를 이미 사용하고 있는 경우 GitHub Actions를 사용하여 워크플로 자동화를 설정할 수 있습니다.

GitHub Actions란?

GitHub Actions는 GitHub의 소프트웨어 개발 워크플로에서 작업을 자동화하기 위한 패키지 스크립트입니다. 개발자가 일정한 시간 간격으로 또는 수동으로 새 소스 코드를 특정 분기에 체크 인할 때마다 조직의 요구 사항을 충족하는 복잡한 워크플로를 트리거하도록 GitHub Actions를 구성할 수 있습니다. 그러면 안정적이고 지속 가능한 자동화된 워크플로가 만들어져 개발 시간이 현저하게 단축됩니다.

GitHub Actions는 어디에서 찾을 수 있나요?

GitHub Actions는 yml 데이터 형식을 따르는 스크립트입니다. 각 리포지토리에는 첫 번째 스크립트 설정을 쉽고 빠르게 시작하는 방법을 제공하는 작업 탭이 있습니다. 적합한 시작점으로 생각되는 워크플로가 표시되면 구성 단추를 클릭하여 스크립트를 추가하고 소스 yml 편집을 시작하기만 하면 됩니다.

간단한 워크플로와 이 워크플로를 설정하는 단추를 표시하는 GitHub Actions *작업 탭*의 스크린샷

그러나 작업 탭에서 제공하는 GitHub Actions 기능 외에도 다음을 수행할 수 있습니다.

  • GitHub Marketplace에서 GitHub Actions를 검색합니다. GitHub Marketplace에서는 워크플로를 확장하는 도구를 검색하고 구매할 수 있습니다.
  • 오픈 소스 프로젝트를 검색합니다. 예를 들어 GitHub Actions 조직은 사용할 수 있는 GitHub Actions 등 널리 사용되는 다양한 오픈 소스 리포지토리를 제공합니다.
  • 처음부터 직접 GitHub Actions를 작성합니다. 원하는 경우 오픈 소스로 설정하거나 GitHub Marketplace에 게시할 수도 있습니다.

오픈 소스 GitHub Actions 사용

많은 GitHub Actions는 오픈 소스로, 이용하려는 모든 사용자에게 제공됩니다. 그러나 오픈 소스 소프트웨어와 마찬가지로 프로젝트에 사용하기 전에 신중하게 확인해야 합니다. 추가 정보, 사용 규정, 영향을 주는 파일 및 이슈 템플릿 등과 같은 오픈 소스 소프트웨어를 사용하는 권장 커뮤니티 표준과 마찬가지로, GitHub Actions를 사용할 때 이러한 권장 사항을 따를 수 있습니다.

  • 입력/출력 시 작업의 action.yml 파일을 검토하고, 코드가 지시하는 대로 작업을 수행하는지 확인합니다.
  • 작업이 GitHub Marketplace에 있는지 확인합니다. 이는 작업이 유효하기 위해 GitHub Marketplace에 있을 필요가 없는 경우에도 확인하면 좋은 검사입니다.
  • 작업이 GitHub Marketplace에서 확인되었는지 확인합니다. 이는 GitHub에서 이 작업의 사용을 승인했음을 의미합니다. 하지만 사용하기 전에 여전히 검토해야 합니다.
  • Git 참조, SHA 또는 태그를 지정하여 사용 중인 작업의 버전을 포함합니다.

GitHub 작업의 유형

GitHub Actions에는 컨테이너 작업, JavaScript 작업, 복합 작업의 세 가지 유형이 있습니다.

컨테이너 작업에서 환경은 작업 코드의 일부입니다. 이러한 작업은 GitHub에서 호스트되는 Linux 환경에서만 실행할 수 있습니다. 컨테이너 작업에서는 다양한 언어를 지원합니다.

JavaScript 작업은 코드에 환경을 포함하지 않습니다. 이러한 작업을 실행할 환경을 지정해야 합니다. 클라우드 또는 온-프레미스의 VM에서 이러한 작업을 실행할 수 있습니다. JavaScript 작업은 Linux, macOS 및 Windows 환경을 지원합니다.

복합 작업을 사용하면 하나의 작업 내에서 여러 워크플로 단계를 결합할 수 있습니다. 예를 들어 이 기능을 사용하여 여러 실행 명령을 작업으로 함께 묶은 다음 해당 작업을 사용하여 함께 묶인 명령을 단일 단계로 실행하는 워크플로를 사용할 수 있습니다.

GitHub Action 분석

다음은 리포지토리의 git checkout을 수행하는 작업의 예입니다. 이 작업( actions/checkout@v1)은 워크플로 단계의 일부입니다. 또한 이 단계에서는 체크 아웃된 Node.js 코드도 작성합니다. 워크플로, 작업, 단계에 대해서는 다음 섹션에서 설명합니다.

steps:
  - uses: actions/checkout@v1
  - name: npm install and build webpack
    run: |
      npm install
      npm run build

컨테이너 작업을 사용하여 컨테이너화된 코드를 실행한다고 가정합니다. 작업은 다음과 같습니다.

name: "Hello Actions"
description: "Greet someone"
author: "octocat@github.com"

inputs:
    MY_NAME:
      description: "Who to greet"
      required: true
      default: "World"

runs:
    uses: "docker"
    image: "Dockerfile"

branding:
    icon: "mic"
    color: "purple"

inputs 섹션을 확인합니다. 여기에서는 MY_NAME 변수의 값을 가져옵니다. 이 변수는 이 작업을 실행하는 워크플로에서 설정합니다.

runs 섹션의 uses 특성에서 docker를 지정합니다. 이 작업을 수행할 때 Docker 이미지 파일의 경로를 제공해야 합니다. 여기에서는 이 파일을 Dockerfile이라고 합니다. 여기에서는 Docker에 대해 구체적으로 살펴보지 않지만 자세한 내용은 Docker 컨테이너 소개 모듈을 참조하세요.

마지막 ‘브랜딩’ 섹션에서는 GitHub Marketplace에서 게시할 작업을 맞춤 설정합니다.

작업 메타데이터의 전체 목록은 GitHub Actions에 대한 메타데이터 구문에서 확인할 수 있습니다.

GitHub Actions 워크플로란?

GitHub Actions 워크플로는 GitHub Actions를 비롯한 소프트웨어 개발 수명 주기 작업을 자동화하기 위해 리포지토리에서 설정하는 프로세스입니다. 워크플로를 사용하여 GitHub에서 프로젝트를 빌드, 테스트, 패키지, 릴리스, 배포할 수 있습니다.

워크플로를 만들려면 GitHub 리포지토리의 .github/workflows 디렉터리에 있는 .yml 파일에 작업을 추가합니다.

다음 연습에서 main.yml 워크플로 파일은 다음과 같습니다.

name: A workflow for my Hello World file
on: push
jobs:
  build:
    name: Hello world action
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - uses: ./action-a
      with:
        MY_NAME: "Mona"

on: 특성을 확인합니다. 이 특성은 이 워크플로를 실행할 시간을 지정하는 ‘트리거’입니다. 여기에서 리포지토리에 대한 푸시 이벤트가 있는 경우 실행을 트리거합니다. 단일 이벤트(예: on: push), 이벤트 배열(예: on: [push, pull_request]) 또는 워크플로를 예약하거나 워크플로 실행을 특정 파일, 태그 또는 분기 변경으로 제한하는 이벤트 구성 맵을 지정할 수 있습니다. 맵은 다음과 비슷합니다.

on:
  # Trigger the workflow on push or pull request,
  # but only for the main branch
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  # Also trigger on page_build, as well as release created events
  page_build:
  release:
    types: # This configuration does not affect the page_build event above
      - created

유형을 지정하지 않을 경우 이벤트의 모든 활동 유형에 대해 이벤트가 트리거됩니다. 이벤트 및 해당 활동 유형에 대한 포괄적인 목록은 GitHub 설명서에서 워크플로를 트리거하는 이벤트를 참조하세요.

워크플로에 ‘작업’이 하나 이상 있어야 합니다. 작업은 실행기와 연결되는 워크플로의 한 섹션입니다. 실행기는 GitHub에서 호스트되거나 자체 호스트될 수 있으며 작업은 머신 또는 컨테이너에서 실행될 수 있습니다. runs-on: 특성을 사용하여 실행기를 지정합니다. 여기에서는 ubuntu-latest에서 이 작업을 실행하도록 워크플로에 지시합니다.

각 작업에는 완료할 단계가 있습니다. 이 예제의 단계에서는 actions/checkout@v1 작업을 사용하여 리포지토리를 체크 아웃합니다. 흥미로운 점은 action.yml 파일에서 빌드되는 컨테이너 작업의 경로인 uses: ./action-a 값입니다. action.yml 파일의 내용은 GitHub Actions란? 섹션에서 살펴보았습니다.

이 워크플로 파일의 마지막 부분에서는 이 워크플로에 대한 MY_NAME 변수 값을 설정합니다. MY_NAME 항목을 입력한 컨테이너 작업을 회수합니다.

워크플로에 대한 자세한 내용은 GitHub Actions에 대한 워크플로 구문을 참조하세요.

GitHub 호스팅 실행기와 자세 호스팅 실행기의 비교

실행기가 작업과 연관되어 있다고 간략하게 언급했습니다. 실행기는 GitHub Actions 실행기 애플리케이션이 설치된 서버에 불과합니다. 이전 워크플로 예제에서는 작업 블록 내에 runs-on: ubuntu-latest 특성이 있었습니다. 이 특성은 ubuntu-latest 환경에서 실행되는 GitHub 호스팅 실행기를 사용하여 작업이 실행된다고 워크플로에 전달했습니다.

실행기와 관련해서 두 가지 옵션을 선택할 수 있습니다. GitHub 호스팅 실행기와 자체 호스팅 실행기의 비교 GitHub 호스팅 실행기를 사용하는 경우, 각 작업은 사용자가 정의한 GitHub 호스팅 실행기 유형(runs-on: {operating system-version})으로 지정된 가상 환경의 새 인스턴스에서 실행됩니다. 자체 호스팅 실행기를 사용하는 경우 자체 호스팅 레이블, 해당 운영 체제 및 시스템 아키텍처를 적용해야 합니다. 예를 들어 Linux 운영 체제 및 ARM32 아키텍처를 사용하는 자체 호스팅 실행기는 다음과 같습니다(runs-on: [self-hosted, linux, ARM32]).

각 실행기 유형에는 이점이 있지만, GitHub 호스팅 실행기는 제한된 옵션으로 워크플로를 더 빠르고 간단하게 실행하는 방법을 제공합니다. 자체 호스팅 실행기는 고유한 사용자 지정 로컬 환경에서 워크플로를 실행하는 고도로 구성 가능한 방법입니다. 자체 호스팅 실행기는 온-프레미스 또는 클라우드에서 실행할 수 있습니다. 또한 자체 호스팅 실행기를 사용하여 더 많은 처리 능력 또는 메모리를 갖춘 사용자 지정 하드웨어 구성을 만들어 더 큰 작업을 실행하고, 로컬 네트워크에서 사용 가능한 소프트웨어를 설치하며, GitHub 호스팅 실행자가 제공하지 않는 운영 체제를 선택할 수 있습니다.

GitHub Actions 사용 제한

GitHub Actions는 실행기가 GitHub에서 호스트되는지 자체 호스트되는지 여부와 GitHub 플랜에 따라 사용이 일부 제한됩니다. 사용 제한에 대한 자세한 내용은 GitHub 설명서의 사용 제한, 청구, 관리를 확인하세요.