Skip to main content

Travis CI에서 GitHub Actions로 마이그레이션

GitHub Actions 및 Travis CI는 여러 유사점을 공유하므로 GitHub Actions로 마이그레이션하는 것이 비교적 간단합니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

소개

이 가이드는 Travis CI에서 GitHub Actions로 마이그레이션하는 데 도움이 됩니다. 개념과 구문을 비교하고 유사성을 설명하며 일반적인 작업에 대한 다양한 접근 방식을 보여 줍니다.

시작하기 전에

GitHub Actions로 마이그레이션을 시작하기 전에 작동 방식을 숙지하는 것이 유용합니다.

작업 실행 비교

CI 작업이 실행되는 시기를 제어할 수 있도록 GitHub Actions _워크플로_에서는 기본적으로 병렬로 실행되는 _작업_을 사용합니다. 각 작업에는 사용자가 정의한 순서대로 실행되는 _단계_가 포함되어 있습니다. 작업에 대한 설정 및 정리 작업을 실행해야 하는 경우 각 작업의 단계를 정의하여 해당 작업을 수행할 수 있습니다.

주요 유사점

GitHub Actions 및 Travis CI는 특정 유사성을 공유하며, 유사성을 미리 이해하면 마이그레이션 프로세스를 원활하게 진행하는 데 도움이 됩니다.

YAML 구문 사용

Travis CI 및 GitHub Actions는 모두 YAML을 사용하여 작업 및 워크플로를 만들고 이 파일은 코드의 리포지토리에 저장됩니다. GitHub Actions에서 YAML을 사용하는 방법에 대한 자세한 내용은 "GitHub Actions 이해"을 참조하십시오.

사용자 지정 변수

트래비스 CI를 사용하면 변수를 설정하고 스테이지 간에 공유할 수 있습니다. 마찬가지로 GitHub Actions를 사용하면 워크플로우에 대한 변수를 정의할 수 있습니다. 자세한 내용은 "Store information in variables"을(를) 참조하세요.

기본 변수

Travis CI 및 GitHub Actions 모두 YAML 파일에서 사용할 수 있는 기본 환경 변수를 포함합니다. 데이터 변수의 경우 GitHub Actions의 경우 "Store information in variables"에 나열된 것을 볼 수 있습니다.

병렬 작업 처리

Travis CI는 stages를 사용하여 작업을 병렬로 실행할 수 있습니다. 마찬가지로 GitHub Actions는 jobs를 병렬로 실행합니다. 자세한 내용은 "워크플로 정보"을(를) 참조하세요.

상태 배지

Travis CI 및 GitHub Actions는 모두 상태 배지를 지원하며 이를 통해 빌드가 통과하는지 또는 실패하는지 여부를 나타낼 수 있습니다. 자세한 내용은 "워크플로 상태 배지 추가"을(를) 참조하세요.

매트릭스 사용

Travis CI 및 GitHub Actions는 모두 매트릭스를 지원하므로 운영 체제와 소프트웨어 패키지의 조합을 사용하여 테스트를 수행할 수 있습니다. 자세한 내용은 "Running variations of jobs in a workflow"을(를) 참조하세요.

아래는 각 시스템의 구문을 비교한 예입니다.

매트릭스에 대한 트래비스 CI 구문

matrix:
  include:
    - rvm: '2.5'
    - rvm: '2.6.3'

행렬에 대한 GitHub Actions 구문

jobs:
  build:
    strategy:
      matrix:
        ruby: ['2.5', '2.6.3']

특정 분기 대상 지정

Travis CI 및 GitHub Actions를 사용하면 CI를 특정 분기로 지정할 수 있습니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.

다음은 각 시스템에 대한 구문의 예입니다.

특정 지점을 타겟팅하기 위한 트래비스 CI 구문

branches:
  only:
    - main
    - 'mona/octocat'

특정 브랜치를 타깃팅하기 위한 GitHub Actions 구문

on:
  push:
    branches:
      - main
      - 'mona/octocat'

하위 모듈 체크 아웃

Travis CI 및 GitHub Actions를 사용하면 하위 모듈이 리포지토리 복제에 포함되는지 여부를 제어할 수 있습니다.

다음은 각 시스템에 대한 구문의 예입니다.

서브모듈을 체크 아웃하기 위한 Travis CI 구문

git:
  submodules: false

하위 모듈 체크 아웃을 위한 GitHub Actions 구문

- uses: actions/checkout@v4
  with:
    submodules: false

매트릭스에서 환경 변수 사용

트래비스 CI와 GitHub Actions는 모두 테스트 매트릭스에 사용자 지정 변수를 추가할 수 있으며, 이를 통해 이후 단계에서 변수를 참조할 수 있습니다.

GitHub Actions에서 include 키를 사용하여 사용자 지정 환경 변수를 매트릭스에 추가할 수 있습니다. 이 예제에서 node-version에 대한 행렬 항목은 각각 site 환경 변수 및 datacenter 환경 변수에 서로 다른 값을 사용하도록 구성됩니다. 그런 다음, Echo site details이 단계는 env: ${{ matrix.env }}를 사용하여 사용자 지정 변수를 참조합니다.

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       include:
         - node-version: '14.x'
           site: "prod"
           datacenter: "site-a"
         - node-version: '16.x'
           site: "dev"
           datacenter: "site-b"
    steps:
      - name: Echo site details
        env:
          SITE: ${{ matrix.site }}
          DATACENTER: ${{ matrix.datacenter }}
        run: echo $SITE $DATACENTER

GitHub Actions의 주요 기능

Travis CI에서 마이그레이션할 때 GitHub Actions의 다음 주요 기능을 고려해 보세요.

비밀 저장

GitHub Actions를 사용하면 작업에서 비밀을 저장하고 참조할 수 있습니다. GitHub Actions 조직은 조직 비밀에 액세스할 수 있는 리포지토리를 제한할 수 있습니다. 배포 보호 규칙은 워크플로가 환경 비밀에 액세스하기 위해 수동 승인을 요구할 수 있습니다. 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.

작업과 워크플로 간에 파일 공유

GitHub Actions에는 아티팩트 스토리지에 대한 통합 지원이 포함되어 있으므로 워크플로의 작업 간에 파일을 공유할 수 있습니다. 또한 결과 파일을 저장하고 다른 워크플로와 공유할 수도 있습니다. 자세한 내용은 "GitHub Actions 이해"을(를) 참조하세요.

사용자 고유의 실행기 호스팅

작업에 특정 하드웨어 또는 소프트웨어가 필요한 경우 GitHub Actions를 사용하면 사용자 고유의 실행기를 호스트하고 작업을 보내 처리할 수 있습니다. 또한 GitHub Actions를 통해 정책을 사용하여 실행기 액세스 방법을 제어하며, 조직 또는 리포지토리 수준에서 액세스 권한을 부여할 수 있습니다. 자세한 내용은 "사용자 고유의 실행기 호스팅"을(를) 참조하세요.

GitHub Actions에서 다른 언어 사용

GitHub Actions에서 다른 언어로 작업하는 경우 작업에 단계를 만들어 언어 종속성을 설정할 수 있습니다. 특정 언어로 작업하는 방법에 대한 자세한 내용은 다음 가이드를 참조하세요.

스크립트 실행

GitHub Actions는 run 단계를 사용하여 스크립트 또는 셸 명령을 실행할 수 있습니다. 특정 셸을 사용하려면 스크립트에 경로를 제공할 때 shell 유형을 지정할 수 있습니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.

예시:

steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash

GitHub Actions에서 오류 처리

GitHub Actions로 마이그레이션할 때는 오류 처리에 대해 알아야 할 다양한 접근 방식이 있습니다.

스크립트 오류 처리

GitHub Actions는 단계 중 하나가 오류 코드를 반환하는 경우 즉시 작업을 중지합니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.

작업 오류 처리

GitHub Actions는 if 조건을 사용하여 특정 상황에서 작업 또는 단계를 실행합니다. 예를 들어 다른 단계에서 failure()가 발생한 경우 단계를 실행할 수 있습니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요. 또한 작업 실패 시 continue-on-error를 사용하여 워크플로 실행이 중지되지 않도록 할 수 있습니다.

조건부 및 식에 대한 구문 마이그레이션

조건식에서 작업을 실행하기 위해 Travis CI 및 GitHub Actions는 비슷한 if 조건 구문을 공유합니다. GitHub Actions를 통해 if 조건부를 사용하여 조건이 충족되지 않는 한 작업 또는 단계가 실행되지 않도록 할 수 있습니다. 자세한 내용은 "Evaluate expressions in workflows and actions"을(를) 참조하세요.

이 예제에서는 if 조건부가 단계 실행 여부를 제어하는 방법을 보여 줍니다.

jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: env.str == 'ABC' && env.num == 123

단계(phase)에서 단계(step)로 마이그레이션

트래비스 CI가 _단계_를 사용하여 _단계_를 실행하는 경우 GitHub Actions에는 _작업_을 실행하는 _단계_가 있습니다. GitHub Marketplace에서 미리 빌드된 작업을 찾거나 사용자 고유의 작업을 만들 수 있습니다. 자세한 내용은 "자동화 공유 중"을(를) 참조하세요.

다음은 각 시스템에 대한 구문의 예입니다.

단계 및 단계에 대한 Travis CI 구문

language: python
python:
  - "3.7"

script:
  - python script.py

단계 및 작업에 대한 GitHub Actions 구문

jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v5
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

종속성 캐싱

Travis CI 및 GitHub Actions를 사용하면 나중에 다시 사용할 수 있도록 종속성을 수동으로 캐시할 수 있습니다.

이 예는 각 시스템에 대한 캐시 구문을 보여줍니다.

캐싱을 위한 Travis CI 구문

language: node_js
cache: npm

캐싱을 위한 GitHub 액션 구문

- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-

일반 작업의 예

이 섹션에서는 GitHub Actions 및 Travis CI가 일반 작업을 수행하는 방법을 비교합니다.

환경 변수 구성

GitHub Actions 작업에서 사용자 지정 환경 변수를 만들 수 있습니다.

환경 변수에 대한 트래비스 CI 구문

env:
  - MAVEN_PATH="/usr/local/maven"

환경 변수가 있는 GitHub Actions 워크플로

jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Node.js를 사용하여 빌드하기

Node.js로 빌드하기 위한 트래비스 CI

install:
  - npm install
script:
  - npm run build
  - npm test

Node.js로 빌드하기 위한 GitHub Actions 워크플로

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test

다음 단계

GitHub Actions의 주요 기능에 대해 계속 알아보려면 "AUTOTITLE"을(를) 참조하세요.