This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
proposed @ayufan @josephburnett @grzegorz @dhershkovitch @DarrenEastman @cheryl.li devops verify 2023-08-23

GitLab 단계 실행기를 통해 GitLab 단계 실행

요약

이 문서는 Step Runner라는 새로운 컴포넌트의 아키텍처, 사용하는 GitLab 단계 구문 및 GitHub Actions 지원 방법을 설명합니다.

경쟁 CI 제품 drone.io, GitHub Actions은 단계 또는 액션 형식으로 구성 가능한 CI 작업 실행을 제공합니다.

GitLab Runner Plugins의 이전 평가 및 그들의 사용법으로부터 확장된 복잡한 워크플로우를 지원하는 더 나은 방법이 필요함을 보여주고 있습니다.

용어집

  • GitLab Steps: 단일 작업 실행 컨텍스트 내에서 재사용 가능한 컴포넌트를 정의하고 사용하는 GitLab CI 기능의 이름
  • Step Runner: GitHub Actions과 호환성을 제공하는 GitLab Steps의 RFC 구현
  • GitHub Actions: GitLab 단계와 유사하게 GitHub에서 사용되는 재사용 가능한 실행 컴포넌트
  • CI Catalog: 공개 또는 비공개 컴포넌트 카탈로그, 공유 컴포넌트를 찾고 사용하는 데 사용될 수 있음
  • GitLab Rails: GitLab.com 또는 온프레미스 설치에서 실행되는 파이프라인 실행을 담당하는 주 애플리케이션

동기

현재의 .gitlab-ci.yml 파일은 상당히 유연하지만, 복잡한 워크플로우를 지원하려고 할 때 쉽게 매우 복잡해집니다. 이 복잡성은 반복적인 패턴, 특정 목적의 구문 또는 실행할 명령어의 복잡한 시퀀스로 표현됩니다.

이는 .gitlab-ci.yml 파일이 더 복잡한 워크플로우에서 유연하지 않으며, CI 작업 실행에 대한 세분화된 또는 특별한 동작을 요구할 때 특히 도전적입니다. Git 클론을 처리하는 방법, artifact를 다운로드하는 시점 및 셸 스크립트를 실행하는 방법을 명시하는 .gitlab-ci.yml 파일의 접근 방식은 종종 “표준”이 아닌 파이프라인을 위해 시스템을 우회해야 할 필요성을 야기합니다. 또는 새로운 기능이 요청될 때에도 마찬가지입니다.

이것은 특히 .gitlab-ci.yml 파일에 새 구문을 추가하여 secure files 또는 release: 키워드와 같은 특정 기능을 지원하려고 할 때 도전적입니다. 이러한 특별한 기능을 구문 수준에서 추가하면 유지 관리하기 어려운 더 복잡한 구성이 되어 요구 사항이 변경될 때 기술적 부채를 처리하기가 더 복잡해집니다.

drone.ioGitHub Actions의 예는 많은 워크플로우가 CI 구문의 일부가 아니어야 하는 것을 보여줍니다. 대신 이들은 CI 구성 파일에서 일반적인 방식으로 구성된 재사용 가능한 컴포넌트 형태로 제공될 수 있으며, 후에 입력 및 매개변수에 따라 다운로드되고 실행될 수 있습니다.

GitLab Steps는 경쟁 제품과 유사한 모델을 따라 제품 간격을 메우고, 어느 정도의 호환성을 유지하기 위해 고안되었습니다. GitLab Steps는 모든 특정 목적의 구문을 대체하기 위해 사용 및 제공되는 재사용 가능한 컴포넌트를 제공합니다. .gitlab-ci.yml 외부에서 빌드된 버전이 표시되며 필요할 때 요청되는 이러한 요소들은 고객에게 더 많은 유연성을 제공하고 카탈로그에 대한 반복을 더 빠르게할 수 있게 합니다.

CI 작업 실행의 일부인 재사용 가능한 컴포넌트는 GitLab.com의 공개 리포지터리, 온프레미스 컴포넌트 리포지터리 또는 로컬 프로젝트에서 사용될 수 있습니다.

각 CI 작업은 실행할 “steps:” 디렉터리을 정의하는데, 이는 GitLab Steps 또는 GitHub Actions을 참조할 것입니다. 이러한 단계는 Step Runner에서 대상 환경의 컨텍스트에서 직접 실행될 것입니다. GitLab Runner가 GitLab.com(또는 온프레미스 설치)과 Step Runner 사이의 연결을 담당합니다.

목표

GitLab Steps:

  • GitLab Steps는 GitLab 특정 단계 구현의 구문 및 구조를 정의함
  • GitLab Steps는 CI 카탈로그에 게시됨
  • GitLab Steps는 인스턴스 간(federation)에서 사용할 수 있음
  • GitLab Steps는 inputsoutputs를 정의함
  • GitLab Steps는 민감한 정보를 명시적으로 요청. 예: 비밀, 변수, 토큰.

GitLab Inc.이 관리하는 GitLab Steps의 리포지터리:

  • GitLab Inc.은 현재 특정 목적의 구문 (artifacts:, cache:, release:, 등)을 대체할 수 있는 GitLab Steps의 리포지터리를 제공
  • GitLab Inc.은 다양한 셸(bash, powershell)을 지원하는 shell 단계를 실행하는 일반 단계 제공
  • 특정 목적의 구문의 사용은 종류에 따라 단계로 대체되어야 함

Step Runner:

  • Step Runner는 https://gitlab.com/gitlab-org 내 별도의 프로젝트에 호스팅됨
  • Step Runner를 사용하여 대부분의 GitHub Actions을 실행할 수 있음
  • Step Runner는 대상 환경에서 프로세스로 실행됨
  • Step Runner는 사용자가 로컬 머신에서 .gitlab-ci.yml을 통해 특정 CI 작업의 단계를 실행할 수 있음
  • Step Runner는 GitLab Runner의 외부 컴포넌트. GitLab Runner는 환경을 프로비저닝하고 페이로드를 구성하여 실행을 Step Runner로 전달함
  • Step Runner는 clone, artifacts, caches, script, after_script 및 다양한 셸(bash, powershell)에 대한 모든 사용자 정의 처리를 GitLab Runner에서 대체하는 것을 책임짐
  • Step Runner는 GitLab Steps 및 GitHub Actions를 구문 분석하고 컴파일하는 것을 책임짐
  • Step Runner는 GitLab Steps 및 GitHub Actions에 필요한 리포지터리 다운로드 및 관리를 책임짐
  • Step Runner는 개별적인 단계 실행의 실행 흐름을 제어 및 모니터링함
  • Step Runner는 명령줄 인터페이스(CLI)에서 실행 가능해야 함. 즉, 구성 파일 또는 환경 파일을 통해 구성하거나 .gitlab-ci.yml을 읽을 수 있어야 함
  • Step Runner는 구성을 실행하거나 추적을 가져올 수 있는 gRPC 또는 다른 프로그래밍 인터페이스를 노출함

단계 실행:

  • 각 단계는 하나의 게시된 또는 로컬에서 정의된 GitLab Step 또는 GitHub Action에 의해 정의됨
  • 해당 단계에서 정의된 조건에 따라 실행됨
  • 최소한의 정보와 함께 실행됨. 단계에 전달되는 환경 변수는 해당 단계에 명시적으로 요청된 환경 변수만 전달됨. 예: 단계에서 명시적으로 요청된 환경 변수만 전달됨
  • 각 단계는 신뢰할 수 없는 것으로 간주됨. 즉, 일부 단계가 신뢰될지라도 전체 CI 작업은 시스템이 신뢰를 보장할 수 없기 때문에 신뢰할 수 없는 것으로 간주되어야 함
  • 각 단계는 실행 조건, 사용된 버전 및 생성된 출력 형식으로 자신의 실행을 설명함. 이는 재현 가능한 빌드를 만들기 위한 목적으로 단계 실행에 서명할 수 있도록 함

예제 호출

명령 줄

  • STEPS=$(cat steps.yml) step-runner ci
  • step-runner local .gitlab-ci.yml --format gitlab-ci --job-name hello-world --output-file trace.json
  • step-runner replay trace.json
  • step-runner ci --port 8080

GitLab CI

hello-world:
  image: registry.gitlab.com/gitlab-org/step-runner
  variables:
    STEPS: |
      - step: gitlab.com/josephburnett/component-hello-steppy@master
        inputs:
          greeting: "hello ${{ env.name }}"
        env:
          name: world
  script:
    - /step-runner ci
  artifacts:
    paths:
      - trace.json

기본 컴파일 및 실행 프로세스

GitLab CI에서 표현된 단계는 기준 단계 정의로 컴파일됩니다. 참조된 단계는 로드되어 exec 명령을 생성하거나, 재귀적으로 컴파일되어 추가 GitLab CI 단계의 디렉터리을 생성합니다. 각 단계는 컴파일 즉시 실행되어 출력이 이후의 컴파일에서 사용할 수 있습니다.

컴파일 중인 데이터 다이어그램

단계는 각 단계 후 Step Runner에 의해 수집된 파일을 통해 출력 및 내보내기를 반환합니다. 마지막으로 각 단계에 대한 컴파일된 입력과 출력이 단계 추적에 수집됩니다.

단계 실행 시퀀스 다이어그램

GitLab 단계 정의 및 구문

GitLab 단계 통합

설계 및 구현 세부 정보

2023-11-28 - GitLab 단계 ADR 001: 부트스트랩 단계 러너

참고