GitHub Actions Importer로 GitLab에서 마이그레이션하기

GitHub Actions Importer로 GitLab에서 마이그레이션하기

GitHub Actions Importer를 사용해서 GitLab 파이프라인을 GitHub Actions로 자동 마이그레이션하는 방법을 알려드릴게요. 환경을 구성하고 감사, 예측, 드라이 런, 프로덕션 마이그레이션을 수행하는 방법을 배워요.

출처: 문서

본문

GitHub Actions Importer를 사용해 GitLab 파이프라인을 GitHub Actions로 마이그레이션하는 방법을 아래 안내와 함께 배워볼게요.

GitHub Actions Importer로 GitLab에서 마이그레이션하기

아래 지침은 GitHub Actions Importer를 사용해 GitLab 파이프라인을 GitHub Actions로 마이그레이션할 수 있도록 환경을 구성하는 방법을 안내해요.

사전 요구 사항

  • GitHub Actions 워크플로우로 변환하려는 파이프라인과 작업이 있는 GitLab 계정 또는 조직.

  • 계정 또는 조직에 대한 GitLab 개인용 액세스 토큰을 만들 수 있는 권한.

  • Linux 기반 컨테이너를 실행하고 필요한 도구를 설치할 수 있는 환경.

    • Docker가 설치되어 있고 실행 중이어야 해요.

    • GitHub CLI가 설치되어 있어야 해요.

    [!NOTE] GitHub Actions Importer 컨테이너와 CLI는 CI 플랫폼과 같은 서버에 설치할 필요가 없어요.

제한 사항

GitHub Actions Importer로 GitLab 파이프라인에서 GitHub Actions로 프로세스를 자동으로 마이그레이션할 때 몇 가지 제한 사항이 있어요.

  • 서로 다른 워크플로우의 작업 간 자동 캐싱은 지원되지 않아요.
  • audit 명령은 조직 계정을 사용할 때만 지원돼요. 그러나 dry-runmigrate 명령은 조직 또는 사용자 계정과 함께 사용할 수 있어요.
수동 태스크

일부 GitLab 구조는 수동으로 마이그레이션해야 해요. 여기에는 다음이 포함돼요:

  • 마스킹된 프로젝트 또는 그룹 변수 값
  • 아티팩트 보고서(Artifact reports)

수동 마이그레이션에 대한 자세한 내용은 GitLab CI/CD에서 GitHub Actions로 마이그레이션하기를 참조하세요.

GitHub Actions Importer CLI 확장 설치

  1. GitHub Actions Importer CLI 확장을 설치해요:

    gh extension install github/gh-actions-importer
    
  2. 확장이 설치되었는지 확인해요:

    $ gh actions-importer -h
    Options:
      -?, -h, --help  Show help and usage information
    
    Commands:
      update     Update to the latest version of GitHub Actions Importer.
      version    Display the version of GitHub Actions Importer.
      configure  Start an interactive prompt to configure credentials used to authenticate with your CI server(s).
      audit      Plan your CI/CD migration by analyzing your current CI/CD footprint.
      forecast   Forecast GitHub Actions usage from historical pipeline utilization.
      dry-run    Convert a pipeline to a GitHub Actions workflow and output its yaml file.
      migrate    Convert a pipeline to a GitHub Actions workflow and open a pull request with the changes.
    

자격 증명 구성

configure CLI 명령은 GitLab 및 GitHub와 작업할 때 GitHub Actions Importer에 필요한 자격 증명과 옵션을 설정하는 데 사용돼요.

  1. GitHub 개인용 액세스 토큰(classic)을 만들어요. 자세한 내용은 개인용 액세스 토큰 관리를 참조하세요.

    토큰에는 workflow 범위가 있어야 해요.

    토큰을 만든 후 복사해 나중에 사용할 수 있도록 안전한 위치에 저장해요.

  2. GitLab 개인용 액세스 토큰을 만들어요. 자세한 내용은 GitLab 문서의 Personal access tokens을 참조하세요.

    토큰에는 read_api 범위가 있어야 해요.

    토큰을 만든 후 복사해 나중에 사용할 수 있도록 안전한 위치에 저장해요.

  3. 터미널에서 GitHub Actions Importer configure CLI 명령을 실행해요:

    gh actions-importer configure
    

    configure 명령은 다음 정보를 묻는 메시지를 표시해요:

    • "Which CI providers are you configuring?"에서 화살표 키를 사용해 GitLab을 선택하고 Space를 눌러 선택한 다음 Enter를 눌러요.
    • "Personal access token for GitHub"에 앞서 만든 개인용 액세스 토큰(classic) 값을 입력하고 Enter를 눌러요.
    • "Base url of the GitHub instance"에서 Enter를 눌러 기본값(https://github.com)을 수락해요.
    • "Private token for GitLab"에 앞서 만든 GitLab 개인용 액세스 토큰 값을 입력하고 Enter를 눌러요.
    • "Base url of the GitLab instance"에 GitLab 인스턴스의 URL을 입력하고 Enter를 눌러요.

    configure 명령 출력의 예는 아래와 같아요.

    $ gh actions-importer configure
    ✔ Which CI providers are you configuring?: GitLab
    Enter the following values (leave empty to omit):
    ✔ Personal access token for GitHub: ***************
    ✔ Base url of the GitHub instance: https://github.com
    ✔ Private token for GitLab: ***************
    ✔ Base url of the GitLab instance: http://localhost
    Environment variables successfully updated.
    
  4. 터미널에서 GitHub Actions Importer update CLI 명령을 실행해 GitHub Packages Container 레지스트리에 연결하고 컨테이너 이미지가 최신 버전으로 업데이트되었는지 확인해요:

    gh actions-importer update
    

    명령의 출력은 아래와 비슷해야 해요:

    Updating ghcr.io/actions-importer/cli:latest...
    ghcr.io/actions-importer/cli:latest up-to-date
    

GitLab 감사(audit) 수행

audit 명령을 사용해 GitLab 서버의 모든 파이프라인에 대한 높은 수준의 개요를 얻을 수 있어요.

audit 명령은 다음 단계를 수행해요:

  1. GitLab 서버에 정의된 모든 프로젝트를 가져와요.
  2. 각 파이프라인을 동등한 GitHub Actions 워크플로우로 변환해요.
  3. GitHub Actions Importer로 가능한 마이그레이션의 완전성과 복잡성을 요약하는 보고서를 생성해요.

audit 명령의 사전 요구 사항

audit 명령을 사용하려면 GitLab 조직 계정으로 구성된 개인용 액세스 토큰이 있어야 해요.

audit 명령 실행

GitLab 서버 감사를 수행하려면 my-gitlab-namespace를 감사할 네임스페이스 또는 그룹으로 바꿔 터미널에서 다음 명령을 실행해요:

gh actions-importer audit gitlab --output-dir tmp/audit --namespace my-gitlab-namespace

감사 결과 검사

지정된 출력 디렉터리의 파일에는 감사 결과가 포함돼요. 감사 결과 요약은 audit_summary.md 파일을 참조하세요.

감사 요약에는 다음 섹션이 있어요.

파이프라인

"Pipelines" 섹션에는 GitHub Actions Importer가 수행한 변환율에 대한 높은 수준의 통계가 포함돼요.

"Pipelines" 섹션에 나타날 수 있는 몇 가지 주요 용어는 다음과 같아요:

  • 성공(Successful) 파이프라인은 모든 파이프라인 구조와 개별 항목이 해당 GitHub Actions 항목으로 100% 자동 변환된 경우예요.
  • 부분 성공(Partially successful) 파이프라인은 모든 파이프라인 구조가 변환되었지만 일부 개별 항목은 해당 GitHub Actions 항목으로 자동 변환되지 않은 경우예요.
  • 지원되지 않음(Unsupported) 파이프라인은 GitHub Actions Importer가 지원하지 않는 정의 유형이에요.
  • 실패(Failed) 파이프라인은 변환 중 치명적인 오류가 발생한 경우예요. 이는 세 가지 이유 중 하나로 발생할 수 있어요:
    • 파이프라인이 원래 잘못 구성되어 유효하지 않은 경우.
    • GitHub Actions Importer가 변환 중 내부 오류를 만난 경우.
    • 잘못된 자격 증명으로 인해 파이프라인에 액세스할 수 없게 만드는 실패한 네트워크 응답이 있었던 경우.

빌드 단계

"Build steps" 섹션에는 모든 파이프라인에서 사용되는 개별 빌드 단계의 개요와 GitHub Actions Importer에 의해 자동 변환된 개수가 포함돼요.

"Build steps" 섹션에 나타날 수 있는 몇 가지 주요 용어는 다음과 같아요:

  • 알려진(known) 빌드 단계는 동등한 액션으로 자동 변환된 단계예요.
  • 알 수 없는(unknown) 빌드 단계는 동등한 액션으로 자동 변환되지 않은 단계예요.
  • 지원되지 않는(unsupported) 빌드 단계는 다음 중 하나인 단계예요:
    • GitHub Actions에서 근본적으로 지원되지 않는 경우.
    • GitHub Actions와 호환되지 않는 방식으로 구성된 경우.
  • 액션(action) 은 변환된 워크플로우에서 사용된 액션 목록이에요. 이는 다음에 중요할 수 있어요:
    • GitHub Enterprise Server를 사용한다면 인스턴스에 동기화할 액션 목록을 수집하는 경우.
    • 사용된 액션의 조직 수준 허용 목록을 정의하는 경우. 이 액션 목록은 보안 또는 규정 준수 팀이 검토해야 할 수 있는 포괄적인 목록이에요.

수동 태스크

"Manual tasks" 섹션에는 GitHub Actions Importer가 자동으로 완료할 수 없고 수동으로 완료해야 하는 태스크의 개요가 포함돼요.

"Manual tasks" 섹션에 나타날 수 있는 몇 가지 주요 용어는 다음과 같아요:

  • 비밀(secret) 은 변환된 파이프라인에서 사용되는 리포지토리 또는 조직 수준 비밀이에요. 이 파이프라인이 제대로 작동하려면 이러한 비밀을 GitHub Actions에서 수동으로 만들어야 해요. 자세한 내용은 GitHub Actions에서 비밀 사용을 참조하세요.
  • 자체 호스팅 러너(self-hosted runner) 는 GitHub 호스팅 러너가 아닌 변환된 파이프라인에서 참조되는 러너의 레이블을 의미해요. 이 파이프라인이 제대로 작동하려면 이러한 러너를 수동으로 정의해야 해요.

파일

감사 보고서의 마지막 섹션은 감사 중 디스크에 기록된 모든 파일의 매니페스트를 제공해요.

각 파이프라인 파일에는 감사에 포함된 다양한 파일이 있어요:

  • GitHub에 정의된 원래 파이프라인.
  • 파이프라인 변환에 사용된 모든 네트워크 응답.
  • 변환된 워크플로우 파일.
  • 실패한 파이프라인 변환을 디버깅하는 데 사용할 수 있는 스택 추적.

또한 workflow_usage.csv 파일에는 성공적으로 변환된 각 파이프라인이 사용하는 모든 액션, 비밀 및 러너의 쉼표로 구분된 목록이 포함돼요. 이는 어떤 워크플로우가 어떤 액션, 비밀 또는 러너를 사용하는지 확인하는 데 유용하며, 보안 검토를 수행하는 데도 유용할 수 있어요.

잠재적 빌드 러너 사용량 예측

forecast 명령을 사용해 GitLab 서버에서 완료된 파이프라인 실행의 메트릭을 계산해 잠재적 GitHub Actions 사용량을 예측할 수 있어요.

forecast 명령 실행

잠재적 GitHub Actions 사용량 예측을 수행하려면 my-gitlab-namespace를 예측할 네임스페이스 또는 그룹으로 바꿔 터미널에서 다음 명령을 실행해요. 기본적으로 GitHub Actions Importer는 지난 7일을 예측 보고서에 포함해요.

gh actions-importer forecast gitlab --output-dir tmp/forecast --namespace my-gitlab-namespace

전체 네임스페이스 예측

전체 네임스페이스와 그 모든 하위 그룹을 예측하려면 --namespace 인수 또는 NAMESPACE 환경 변수에 각 하위 그룹을 지정해야 해요.

예를 들어:

gh actions-importer forecast gitlab --namespace my-gitlab-namespace my-gitlab-namespace/subgroup-one my-gitlab-namespace/subgroup-two ...

예측 보고서 검사

지정된 출력 디렉터리의 forecast_report.md 파일에는 예측 결과가 포함돼요.

예측 보고서에 나타날 수 있는 몇 가지 주요 용어는 다음과 같아요:

  • 작업 수(job count) 는 완료된 작업의 총 수예요.
  • 파이프라인 수(pipeline count) 는 사용된 고유 파이프라인의 수예요.
  • 실행 시간(Execution time) 은 러너가 작업에 소비한 시간을 설명해요. 이 메트릭은 GitHub 호스팅 러너의 비용을 계획하는 데 도움이 될 수 있어요.
    • 이 메트릭은 GitHub Actions에서 얼마나 지출할지 예상할 수 있는 정도와 상관관계가 있어요. 이는 사용된 하드웨어에 따라 달라요. GitHub Actions 가격 계산기를 사용해 비용을 추정할 수 있어요.
  • 대기 시간(Queue time) 메트릭은 작업이 실행을 위해 러너를 기다리는 데 소비한 시간을 설명해요.
  • 동시 작업(Concurrent jobs) 메트릭은 주어진 시간에 실행 중인 작업의 수를 설명해요. 이 메트릭은 구성해야 할 러너 수를 정의하는 데 사용할 수 있어요.

또한 이러한 메트릭은 GitLab의 각 러너 대기열에 대해 정의돼요. 호스팅 또는 자체 호스팅 러너가 혼합되어 있거나 사양이 높거나 낮은 머신이 혼합되어 있는 경우 특히 유용해서, 다양한 유형의 러너에 특화된 메트릭을 볼 수 있어요.

GitLab 파이프라인 드라이 런 마이그레이션 수행

dry-run 명령을 사용해 GitLab 파이프라인을 동등한 GitHub Actions 워크플로우로 변환할 수 있어요.

dry-run 명령 실행

dry-run 명령을 사용해 GitLab 파이프라인을 동등한 GitHub Actions 워크플로우로 변환할 수 있어요. 드라이 런은 출력 파일을 지정된 디렉터리에 생성하지만 파이프라인을 마이그레이션하기 위한 풀 리퀘스트는 열지 않아요.

GitLab 파이프라인을 GitHub Actions로 마이그레이션하는 드라이 런을 수행하려면 my-gitlab-project를 GitLab 프로젝트 슬러그로, my-gitlab-namespace를 드라이 런을 수행할 네임스페이스 또는 그룹(하위 그룹의 경우 전체 그룹 경로, 예: my-org/my-team)으로 바꿔 터미널에서 다음 명령을 실행해요.

gh actions-importer dry-run gitlab --output-dir tmp/dry-run --namespace my-gitlab-namespace --project my-gitlab-project

변환된 워크플로우 검사

지정된 출력 디렉터리에서 드라이 런의 로그와 변환된 워크플로우 파일을 볼 수 있어요.

알 수 없는 빌드 단계나 부분적으로 성공한 파이프라인과 같이 GitHub Actions Importer가 자동으로 변환할 수 없는 것이 있으면 사용자 지정 변환기를 만들어 변환 프로세스를 추가로 사용자 지정할 수 있어요. 자세한 내용은 사용자 지정 변환기로 GitHub Actions Importer 확장을 참조하세요.

GitLab 파이프라인 프로덕션 마이그레이션 수행

migrate 명령을 사용해 GitLab 파이프라인을 변환하고 동등한 GitHub Actions 워크플로우로 풀 리퀘스트를 열 수 있어요.

migrate 명령 실행

GitLab 파이프라인을 GitHub Actions로 마이그레이션하려면 다음 값을 바꿔 터미널에서 다음 명령을 실행해요:

  • target-url 값을 GitHub 리포지토리의 URL로
  • my-gitlab-project를 GitLab 프로젝트 슬러그로
  • my-gitlab-namespace를 마이그레이션할 네임스페이스 또는 그룹으로 (하위 그룹의 경우 전체 경로, 예: my-org/my-team)
gh actions-importer migrate gitlab --target-url https://github.com/:owner/:repo --output-dir tmp/migrate --namespace my-gitlab-namespace --project my-gitlab-project

명령의 출력에는 리포지토리에 변환된 워크플로우를 추가하는 풀 리퀘스트의 URL이 포함돼요. 성공적인 출력의 예는 다음과 같아요:

$ gh actions-importer migrate gitlab --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate --namespace octo-org --project monas-project
[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'
[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'

풀 리퀘스트 검사

migrate 명령의 성공적인 실행 출력에는 변환된 워크플로우를 리포지토리에 추가하는 새 풀 리퀘스트에 대한 링크가 포함돼요.

풀 리퀘스트의 몇 가지 중요한 요소는 다음과 같아요:

  • 풀 리퀘스트 설명에는 Manual steps이라는 섹션이 있는데, 파이프라인을 GitHub Actions로 마이그레이션을 완료하기 전에 수동으로 완료해야 하는 단계를 나열해요. 예를 들어 이 섹션에서 워크플로우에서 사용된 비밀을 만들어야 한다고 알려줄 수 있어요.
  • 변환된 워크플로우 파일. 풀 리퀘스트에서 Files changed 탭을 선택해 GitHub 리포지토리에 추가될 워크플로우 파일을 확인해요.

풀 리퀘스트 검사를 마치면 병합하여 워크플로우를 GitHub 리포지토리에 추가할 수 있어요.

참조(Reference)

이 섹션에는 GitHub Actions Importer를 사용해 GitLab에서 마이그레이션할 때의 환경 변수, 선택적 인수 및 지원되는 구문에 대한 참조 정보가 포함돼요.

환경 변수 사용

GitHub Actions Importer는 인증 구성에 환경 변수를 사용해요. 이러한 변수는 configure 명령을 사용한 구성 프로세스를 따를 때 설정돼요. 자세한 내용은 자격 증명 구성 섹션을 참조하세요.

GitHub Actions Importer는 GitLab 인스턴스에 연결하기 위해 다음 환경 변수를 사용해요:

  • GITHUB_ACCESS_TOKEN: 변환된 워크플로우로 풀 리퀘스트를 만드는 데 사용되는 개인용 액세스 토큰(classic) (workflow 범위 필요).
  • GITHUB_INSTANCE_URL: 대상 GitHub 인스턴스의 URL (예: https://github.com).
  • GITLAB_ACCESS_TOKEN: GitLab 리소스를 보는 데 사용되는 GitLab 개인용 액세스 토큰.
  • GITLAB_INSTANCE_URL: GitLab 인스턴스의 URL.
  • NAMESPACE: GitLab 파이프라인이 포함된 네임스페이스 또는 그룹.

이러한 환경 변수는 GitHub Actions Importer가 실행될 때 로드되는 .env.local 파일에 지정할 수 있어요.

선택적 인수 사용

GitHub Actions Importer 하위 명령과 함께 사용하여 마이그레이션을 사용자 지정할 수 있는 선택적 인수가 있어요.

--source-file-path

--source-file-path 인수는 forecast, dry-run 또는 migrate 하위 명령과 함께 사용할 수 있어요.

기본적으로 GitHub Actions Importer는 소스 제어에서 파이프라인 콘텐츠를 가져와요. --source-file-path 인수는 대신 지정된 소스 파일 경로를 사용하도록 GitHub Actions Importer에 지시해요.

예를 들어:

gh actions-importer dry-run gitlab --output-dir output/ --namespace my-gitlab-namespace --project my-gitlab-project --source-file-path path/to/.gitlab-ci.yml

forecast 하위 명령을 실행할 때 여러 소스 파일을 제공하려면 파일 경로 값에서 패턴 매칭을 사용할 수 있어요. 다음 예는 ./tmp/previous_forecast/jobs/*.json 파일 경로와 일치하는 모든 소스 파일을 GitHub Actions Importer에 제공해요.

gh actions-importer forecast gitlab --output-dir output/ --namespace my-gitlab-namespace --project my-gitlab-project --source-file-path ./tmp/previous_forecast/jobs/*.json

--config-file-path

--config-file-path 인수는 audit, dry-runmigrate 하위 명령과 함께 사용할 수 있어요.

기본적으로 GitHub Actions Importer는 소스 제어에서 파이프라인 콘텐츠를 가져와요. --config-file-path 인수는 대신 지정된 소스 파일을 사용하도록 GitHub Actions Importer에 지시해요.

--config-file-path 인수는 변환된 재사용 가능한 워크플로우가 마이그레이션되어야 하는 리포지토리를 지정하는 데도 사용할 수 있어요.

감사 예

이 예에서 GitHub Actions Importer는 지정된 YAML 구성 파일을 사용해 감사를 수행해요.

gh actions-importer audit gitlab --output-dir path/to/output/ --namespace my-gitlab-namespace --config-file-path path/to/gitlab/config.yml

구성 파일을 사용해 GitLab 인스턴스를 감사하려면 파일이 다음 형식이어야 하고 각 repository_slug 값이 고유해야 해요:

source_files:
  - repository_slug: namespace/project-name
    path: path/to/.gitlab-ci.yml
  - repository_slug: namespace/some-other-project-name
    path: path/to/.gitlab-ci.yml
드라이 런 예

이 예에서 GitHub Actions Importer는 지정된 YAML 구성 파일을 소스 파일로 사용해 드라이 런을 수행해요.

파이프라인은 구성 파일의 repository_slug--namespace--project 옵션의 값과 일치시켜 선택돼요. 그런 다음 path를 사용해 지정된 소스 파일을 가져와요.

gh actions-importer dry-run gitlab --namespace my-gitlab-namespace --project my-gitlab-project-name --output-dir ./output/ --config-file-path ./path/to/gitlab/config.yml
변환된 재사용 가능한 워크플로우의 리포지토리 지정

GitHub Actions Importer는 --config-file-path 인수에 제공된 YAML 파일을 사용해 변환된 재사용 가능한 워크플로우가 마이그레이션되는 리포지토리를 결정해요.

먼저 --config-file-path 인수 없이 감사를 실행해야 해요:

gh actions-importer audit gitlab --output-dir ./output/

이 명령의 출력에는 GitHub Actions Importer가 변환한 모든 복합 액션의 목록이 포함된 config.yml이라는 파일이 포함돼요. 예를 들어 config.yml 파일에는 다음과 같은 내용이 있을 수 있어요:

reusable_workflows:
  - name: my-reusable-workflow.yml
    target_url: https://github.com/octo-org/octo-repo
    ref: main

이 파일을 사용해 재사용 가능한 워크플로우 또는 복합 액션이 추가되어야 하는 리포지토리와 ref를 지정할 수 있어요. 그런 다음 --config-file-path 인수를 사용해 config.yml 파일을 GitHub Actions Importer에 제공할 수 있어요. 예를 들어 migrate 명령을 실행할 때 이 파일을 사용해 구성 파일에 정의된 각 고유 리포지토리에 대한 풀 리퀘스트를 열 수 있어요:

gh actions-importer migrate gitlab --project my-project-name --output-dir output/ --config-file-path config.yml --target-url https://github.com/my-org/my-repo

GitLab 파이프라인에 대한 지원 구문

다음 표는 GitHub Actions Importer가 현재 변환할 수 있는 속성 유형을 보여줘요. GitLab 파이프라인 구문이 GitHub Actions와 어떻게 일치하는지에 대한 자세한 내용은 GitLab CI/CD에서 GitHub Actions로 마이그레이션하기를 참조하세요.

GitLab Pipelines GitHub Actions 상태
after_script jobs.<job_id>.steps 지원됨
auto_cancel_pending_pipelines concurrency 지원됨
before_script jobs.<job_id>.steps 지원됨
build_timeout or timeout jobs.<job_id>.timeout-minutes 지원됨
default 해당 없음 지원됨
image jobs.<job_id>.container 지원됨
job jobs.<job_id> 지원됨
needs jobs.<job_id>.needs 지원됨
only_allow_merge_if_pipeline_succeeds on.pull_request 지원됨
resource_group jobs.<job_id>.concurrency 지원됨
schedule on.schedule 지원됨
script jobs.<job_id>.steps 지원됨
stages jobs 지원됨
tags jobs.<job_id>.runs-on 지원됨
variables env, jobs.<job_id>.env 지원됨
새 커밋에 대한 파이프라인 실행 on.push 지원됨
파이프라인 수동 실행 on.workflow_dispatch 지원됨
environment jobs.<job_id>.environment 부분 지원
include include 문에서 참조되는 파일은 변환되기 전에 단일 작업 그래프로 병합됨. 부분 지원
only or except jobs.<job_id>.if 부분 지원
parallel jobs.<job_id>.strategy 부분 지원
rules jobs.<job_id>.if 부분 지원
services jobs.<job_id>.services 부분 지원
workflow if 부분 지원

지원되는 GitLab 구조에 대한 정보는 github/gh-actions-importer 리포지토리를 참조하세요.

환경 변수 구문

GitHub Actions Importer는 아래 표의 매핑을 사용해 기본 GitLab 환경 변수를 GitHub Actions에서 가장 가까운 동등 항목으로 변환해요.

GitLab GitHub Actions
CI_API_V4_URL ${{ github.api_url }}
CI_BUILDS_DIR ${{ github.workspace }}
CI_COMMIT_BRANCH ${{ github.ref }}
CI_COMMIT_REF_NAME ${{ github.ref }}
CI_COMMIT_REF_SLUG ${{ github.ref }}
CI_COMMIT_SHA ${{ github.sha }}
CI_COMMIT_SHORT_SHA ${{ github.sha }}
CI_COMMIT_TAG ${{ github.ref }}
CI_JOB_ID ${{ github.job }}
CI_JOB_MANUAL ${{ github.event_name == 'workflow_dispatch' }}
CI_JOB_NAME ${{ github.job }}
CI_JOB_STATUS ${{ job.status }}
CI_JOB_URL ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
CI_JOB_TOKEN ${{ github.token }}
CI_NODE_INDEX ${{ strategy.job-index }}
CI_NODE_TOTAL ${{ strategy.job-total }}
CI_PIPELINE_ID ${{ github.repository}}/${{ github.workflow }}
CI_PIPELINE_IID ${{ github.workflow }}
CI_PIPELINE_SOURCE ${{ github.event_name }}
CI_PIPELINE_TRIGGERED ${{ github.actions }}
CI_PIPELINE_URL ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
CI_PROJECT_DIR ${{ github.workspace }}
CI_PROJECT_ID ${{ github.repository }}
CI_PROJECT_NAME ${{ github.event.repository.name }}
CI_PROJECT_NAMESPACE ${{ github.repository_owner }}
CI_PROJECT_PATH_SLUG ${{ github.repository }}
CI_PROJECT_PATH ${{ github.repository }}
CI_PROJECT_ROOT_NAMESPACE ${{ github.repository_owner }}
CI_PROJECT_TITLE ${{ github.event.repository.full_name }}
CI_PROJECT_URL ${{ github.server_url }}/${{ github.repository }}
CI_REPOSITORY_URL ${{ github.event.repository.clone_url }}
CI_RUNNER_EXECUTABLE_ARCH ${{ runner.os }}
CI_SERVER_HOST ${{ github.server_url }}
CI_SERVER_URL ${{ github.server_url }}
CI_SERVER ${{ github.actions }}
GITLAB_CI ${{ github.actions }}
GITLAB_USER_EMAIL ${{ github.actor }}
GITLAB_USER_ID ${{ github.actor }}
GITLAB_USER_LOGIN ${{ github.actor }}
GITLAB_USER_NAME ${{ github.actor }}
TRIGGER_PAYLOAD ${{ github.event_path }}
CI_MERGE_REQUEST_ASSIGNEES ${{ github.event.pull_request.assignees }}
CI_MERGE_REQUEST_ID ${{ github.event.pull_request.number }}
CI_MERGE_REQUEST_IID ${{ github.event.pull_request.number }}
CI_MERGE_REQUEST_LABELS ${{ github.event.pull_request.labels }}
CI_MERGE_REQUEST_MILESTONE ${{ github.event.pull_request.milestone }}
CI_MERGE_REQUEST_PROJECT_ID ${{ github.repository }}
CI_MERGE_REQUEST_PROJECT_PATH ${{ github.repository }}
CI_MERGE_REQUEST_PROJECT_URL ${{ github.server_url }}/${{ github.repository }}
CI_MERGE_REQUEST_REF_PATH ${{ github.ref }}
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ${{ github.event.pull_request.head.ref }}
CI_MERGE_REQUEST_SOURCE_BRANCH_SHA ${{ github.event.pull_request.head.sha}}
CI_MERGE_REQUEST_SOURCE_PROJECT_ID ${{ github.event.pull_request.head.repo.full_name }}
CI_MERGE_REQUEST_SOURCE_PROJECT_PATH ${{ github.event.pull_request.head.repo.full_name }}
CI_MERGE_REQUEST_SOURCE_PROJECT_URL ${{ github.event.pull_request.head.repo.url }}
CI_MERGE_REQUEST_TARGET_BRANCH_NAME ${{ github.event.pull_request.base.ref }}
CI_MERGE_REQUEST_TARGET_BRANCH_SHA ${{ github.event.pull_request.base.sha }}
CI_MERGE_REQUEST_TITLE ${{ github.event.pull_request.title }}
CI_EXTERNAL_PULL_REQUEST_IID ${{ github.event.pull_request.number }}
CI_EXTERNAL_PULL_REQUEST_SOURCE_REPOSITORY ${{ github.event.pull_request.head.repo.full_name }}
CI_EXTERNAL_PULL_REQUEST_TARGET_REPOSITORY ${{ github.event.pull_request.base.repo.full_name }}
CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_NAME ${{ github.event.pull_request.head.ref }}
CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_SHA ${{ github.event.pull_request.head.sha }}
CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_NAME ${{ github.event.pull_request.base.ref }}
CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_SHA ${{ github.event.pull_request.base.sha }}

법적 고지

이 문서의 일부는 MIT 라이선스에 따라 https://github.com/github/gh-actions-importer/에서 각색되었어요:

MIT License

Copyright (c) 2022 GitHub

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.