Skip to main content

이 버전의 GitHub Enterprise는 다음 날짜에 중단되었습니다. 2023-01-18. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 성능 향상, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

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을 사용하는 방법에 대한 자세한 내용은 “워크플로 파일 만들기”를 참조하세요.

사용자 지정 변수

Travis CI를 사용하면 변수를 설정하고 스테이지 간에 공유할 수 있습니다. 마찬가지로 GitHub Actions를 사용하면 워크플로에 대한 변수를 정의할 수 있습니다. 자세한 내용은 "변수"를 참조하세요.

기본 변수

Travis CI 및 GitHub Actions 모두 YAML 파일에서 사용할 수 있는 기본 환경 변수를 포함합니다. GitHub Actions의 경우 “기본 환경 변수”에서 확인할 수 있습니다.

병렬 작업 처리

Travis CI는 stages를 사용하여 작업을 병렬로 실행할 수 있습니다. 마찬가지로 GitHub Actions는 jobs를 병렬로 실행합니다. 자세한 내용은 “종속 작업 만들기”를 참조하세요.

상태 배지

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

매트릭스 사용

Travis CI 및 GitHub Actions는 모두 매트릭스를 지원하므로 운영 체제와 소프트웨어 패키지의 조합을 사용하여 테스트를 수행할 수 있습니다. 자세한 내용은 “작업에 매트릭스 사용”을 참조하세요.

다음은 각 시스템의 구문을 비교하는 예제입니다.

Travis CI GitHub Actions
matrix:
  include:
    - rvm: 2.5
    - rvm: 2.6.3
jobs:
  build:
    strategy:
      matrix:
        ruby: [2.5, 2.6.3]

특정 분기 대상 지정

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

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

Travis CI GitHub Actions
branches:
  only:
    - main
    - 'mona/octocat'
on:
  push:
    branches:
      - main
      - 'mona/octocat'

하위 모듈 체크 아웃

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

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

Travis CI GitHub Actions
git:
  submodules: false
- uses: actions/checkout@v2
  with:
    submodules: false

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

Travis 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: 10.x
           site: "prod"
           datacenter: "site-a"
         - node-version: 12.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는 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 조건부를 사용하여 조건이 충족되지 않는 한 작업 또는 단계가 실행되지 않도록 할 수 있습니다. 자세한 내용은 “언어 식”을 참조하세요.

이 예제에서는 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)로 마이그레이션

Travis CI가 단계(phase)를 사용하여 단계(step)를 실행하는 경우 GitHub Actions에는 작업을 실행하는 단계(step)가 있습니다. GitHub Marketplace에서 미리 빌드된 작업을 찾거나 사용자 고유의 작업을 만들 수 있습니다. 자세한 내용은 “작업 빌드”를 참조하세요.

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

Travis CI GitHub Actions
language: python
python:
  - "3.7"

스크립트에 추가합니다.
  - python script.py
jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v2
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

종속성 캐싱

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

GitHub Actions 캐싱은 GitHub.com 또는 GitHub Enterprise Server 3.5 이상에서 호스트되는 리포지토리에만 사용할 수 있습니다. 자세한 내용은 “워크플로 속도를 높이기 위한 종속성 캐싱”을 참조하세요.

일반 작업의 예

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

환경 변수 구성

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

Travis CI GitHub Actions 워크플로
env:
  - MAVEN_PATH="/usr/local/maven"
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

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

Travis CI GitHub Actions 워크플로
install:
  - npm install
script:
  - npm run build
  - npm test
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'
      - run: npm install
      - run: npm run build
      - run: npm test

다음 단계

GitHub Actions의 주요 기능에 대해 계속 알아보려면 “GitHub Actions 알아보기”를 참조하세요.