InfoGrab Docs

작업 실행 흐름

요약

작업 실행 흐름은 GitLab Runner가 CI/CD 작업을 처음부터 끝까지 처리하는 방법을 설명합니다. GitLab Runner는 작업을 받은 후 vault에서 시크릿을 검색하고(구성된 경우), executor를 준비한 후 CI/CD 작업을 실행합니다.

작업 실행 흐름은 GitLab Runner가 CI/CD 작업을 처음부터 끝까지 처리하는 방법을 설명합니다.

GitLab Runner는 작업을 받은 후 vault에서 시크릿을 검색하고(구성된 경우), executor를 준비한 후 CI/CD 작업을 실행합니다. 모든 CI/CD 작업은 각 단계가 별도의 셸 컨텍스트에서 실행되는 일련의 순차적인 단계로 실행됩니다. 러너는 다음을 수행합니다:

  1. 작업을 위한 소스 코드를 준비합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 구성에 정의된 경우 pre_get_sources_script를 실행합니다.
    • none 전략이 구성되지 않은 경우 git fetch 및 기타 소스 처리 명령을 실행합니다.
    • 하위 모듈이 있는 경우 업데이트하는 명령을 실행합니다.
    • 구성에 정의된 경우 post_get_sources_script를 실행합니다.
  2. 캐시가 구성되고 이전 단계가 성공한 경우 캐시된 파일을 다운로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 이전 작업 실행에서 캐시된 파일을 다운로드하는 명령을 실행합니다.
  3. 아티팩트 다운로드가 구성되고 이전 단계가 성공한 경우 이전 작업의 아티팩트를 다운로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 이전 작업에서 아티팩트 파일을 다운로드하는 명령을 실행합니다.
  4. 이전 단계가 성공한 경우 메인 작업 스크립트를 실행합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 구성에 정의된 경우 pre_build_script를 실행합니다.
    • 정의된 경우 before_script 명령을 실행합니다.
    • 메인 script 명령을 실행합니다.
    • 구성에 정의된 경우 post_build_script를 실행합니다.
  5. 정의된 경우 이전 단계의 실패 여부에 관계없이 after_script 명령을 실행합니다:

    • 새 셸 컨텍스트에 변수를 내보냅니다.
    • after_script 명령을 실행합니다.
    • 이 명령의 실패는 전체 작업 상태에 영향을 미치지 않습니다.
  6. 캐시 업로드가 구성된 경우 이전 단계의 실패 여부에 관계없이 캐시에 파일을 업로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 지정된 파일을 캐시 스토리지에 업로드하는 명령을 실행합니다.
    • 이 단계의 실패는 전체 작업 상태에 영향을 미칠 수 있습니다.
  7. 아티팩트 업로드가 구성된 경우 이전 단계의 실패 여부에 관계없이 아티팩트를 업로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 지정된 파일을 작업 아티팩트로 업로드하는 명령을 실행합니다.
    • 이 단계의 실패는 전체 작업 상태에 영향을 미칠 수 있습니다.
  8. 심판 업로드가 구성된 경우 이전 단계의 실패 여부에 관계없이 심판 데이터를 업로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 심판 정보를 업로드하는 명령을 실행합니다.
    • 이 명령의 실패는 전체 작업 상태에 영향을 미치지 않습니다.
  9. 구성된 경우 이전 단계의 실패 여부에 관계없이 정리 작업을 수행합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 작업 디렉토리에서 파일 기반 변수를 삭제하는 명령을 실행합니다.
    • 이 명령의 실패는 전체 작업에 영향을 미치지 않습니다.
Mermaid 다이어그램 (28줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
    accTitle: GitLab CI/CD Job Execution Flow
    accDescr: Shows the complete 9-step job execution sequence from source preparation through cleanup operations.
Start([Job Starts]) --> Source[1. Source preparation<br/><small>Export variables, runs <code>pre_get_sources_script</code>,</small><br/><small><code>git fetch</code>, submodules, <code>post_get_sources_script</code>.</small>]

Source --> Cache[2. Download cache<br/><small>If configured and previous step succeeds.</small>]

Cache --> Artifacts[3. Download artifacts<br/><small>If configured and previous step succeeds.</small>]

Artifacts --> MainExec[4. Main execution<br/><small>Export variables, <code>pre_build_script</code>,</small><br/><small><code>before_script</code>, <code>script</code>, <code>post_build_script</code>.</small>]

MainExec --> AfterScript[5. <code>after_script</code><br/><small>Always runs if defined.</small><br/><small>Files created here are included.</small>]

AfterScript --> Critical[⚠️ CRITICAL: <code>after_script</code> runs BEFORE upload stages.]

Critical --> UploadCache[6. Upload cache<br/><small>Always runs if configured.</small><br/><small>Failure may affect job status.</small>]

Critical --> UploadArtifacts[7. Upload artifacts<br/><small>Always runs if configured.</small><br/><small>Failure may affect job status.</small>]

UploadCache --> UploadReferees[8. Upload referees<br/><small>Always runs if configured.</small><br/><small>Failure doesn't affect job status.</small>]

UploadArtifacts --> UploadReferees

UploadReferees --> Cleanup[9. Cleanup operations<br/><small>Always runs if configured.</small><br/><small>Delete file-based variables.</small>]

Cleanup --&gt; End([Job Complete])</code></pre></details></div>

셸 컨텍스트 격리#

각 셸 컨텍스트는 설계상 격리됩니다. 컨텍스트 간의 유일한 연결은 공유 작업 디렉토리 파일 시스템입니다.

  • 한 컨텍스트에서의 수동 변수 내보내기(예: export my_variable=$(date))는 다른 컨텍스트에서 사용할 수 없습니다.
  • 각 스크립트는 Unix 셸의 경우 set -eo pipefail로 실행되어 첫 번째 오류에서 일찍 실패합니다.
  • 각 단계의 결과는 이후 단계가 실행되는지 여부에 영향을 미치고 전체 작업 상태에 영향을 미칩니다.

작업 실행 흐름

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

작업 실행 흐름은 GitLab Runner가 CI/CD 작업을 처음부터 끝까지 처리하는 방법을 설명합니다. GitLab Runner는 작업을 받은 후 vault에서 시크릿을 검색하고(구성된 경우), executor를 준비한 후 CI/CD 작업을 실행합니다.

작업 실행 흐름은 GitLab Runner가 CI/CD 작업을 처음부터 끝까지 처리하는 방법을 설명합니다.

GitLab Runner는 작업을 받은 후 vault에서 시크릿을 검색하고(구성된 경우), executor를 준비한 후 CI/CD 작업을 실행합니다. 모든 CI/CD 작업은 각 단계가 별도의 셸 컨텍스트에서 실행되는 일련의 순차적인 단계로 실행됩니다. 러너는 다음을 수행합니다:

  1. 작업을 위한 소스 코드를 준비합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 구성에 정의된 경우 pre_get_sources_script를 실행합니다.
    • none 전략이 구성되지 않은 경우 git fetch 및 기타 소스 처리 명령을 실행합니다.
    • 하위 모듈이 있는 경우 업데이트하는 명령을 실행합니다.
    • 구성에 정의된 경우 post_get_sources_script를 실행합니다.
  2. 캐시가 구성되고 이전 단계가 성공한 경우 캐시된 파일을 다운로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 이전 작업 실행에서 캐시된 파일을 다운로드하는 명령을 실행합니다.
  3. 아티팩트 다운로드가 구성되고 이전 단계가 성공한 경우 이전 작업의 아티팩트를 다운로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 이전 작업에서 아티팩트 파일을 다운로드하는 명령을 실행합니다.
  4. 이전 단계가 성공한 경우 메인 작업 스크립트를 실행합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 구성에 정의된 경우 pre_build_script를 실행합니다.
    • 정의된 경우 before_script 명령을 실행합니다.
    • 메인 script 명령을 실행합니다.
    • 구성에 정의된 경우 post_build_script를 실행합니다.
  5. 정의된 경우 이전 단계의 실패 여부에 관계없이 after_script 명령을 실행합니다:

    • 새 셸 컨텍스트에 변수를 내보냅니다.
    • after_script 명령을 실행합니다.
    • 이 명령의 실패는 전체 작업 상태에 영향을 미치지 않습니다.
  6. 캐시 업로드가 구성된 경우 이전 단계의 실패 여부에 관계없이 캐시에 파일을 업로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 지정된 파일을 캐시 스토리지에 업로드하는 명령을 실행합니다.
    • 이 단계의 실패는 전체 작업 상태에 영향을 미칠 수 있습니다.
  7. 아티팩트 업로드가 구성된 경우 이전 단계의 실패 여부에 관계없이 아티팩트를 업로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 지정된 파일을 작업 아티팩트로 업로드하는 명령을 실행합니다.
    • 이 단계의 실패는 전체 작업 상태에 영향을 미칠 수 있습니다.
  8. 심판 업로드가 구성된 경우 이전 단계의 실패 여부에 관계없이 심판 데이터를 업로드합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 심판 정보를 업로드하는 명령을 실행합니다.
    • 이 명령의 실패는 전체 작업 상태에 영향을 미치지 않습니다.
  9. 구성된 경우 이전 단계의 실패 여부에 관계없이 정리 작업을 수행합니다:

    • 셸 컨텍스트에 변수를 내보냅니다.
    • 작업 디렉토리에서 파일 기반 변수를 삭제하는 명령을 실행합니다.
    • 이 명령의 실패는 전체 작업에 영향을 미치지 않습니다.
Mermaid 다이어그램 (28줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
    accTitle: GitLab CI/CD Job Execution Flow
    accDescr: Shows the complete 9-step job execution sequence from source preparation through cleanup operations.
Start([Job Starts]) --&gt; Source[1. Source preparation&lt;br/&gt;&lt;small&gt;Export variables, runs &lt;code&gt;pre_get_sources_script&lt;/code&gt;,&lt;/small&gt;&lt;br/&gt;&lt;small&gt;&lt;code&gt;git fetch&lt;/code&gt;, submodules, &lt;code&gt;post_get_sources_script&lt;/code&gt;.&lt;/small&gt;]

Source --&gt; Cache[2. Download cache&lt;br/&gt;&lt;small&gt;If configured and previous step succeeds.&lt;/small&gt;]

Cache --&gt; Artifacts[3. Download artifacts&lt;br/&gt;&lt;small&gt;If configured and previous step succeeds.&lt;/small&gt;]

Artifacts --&gt; MainExec[4. Main execution&lt;br/&gt;&lt;small&gt;Export variables, &lt;code&gt;pre_build_script&lt;/code&gt;,&lt;/small&gt;&lt;br/&gt;&lt;small&gt;&lt;code&gt;before_script&lt;/code&gt;, &lt;code&gt;script&lt;/code&gt;, &lt;code&gt;post_build_script&lt;/code&gt;.&lt;/small&gt;]

MainExec --&gt; AfterScript[5. &lt;code&gt;after_script&lt;/code&gt;&lt;br/&gt;&lt;small&gt;Always runs if defined.&lt;/small&gt;&lt;br/&gt;&lt;small&gt;Files created here are included.&lt;/small&gt;]

AfterScript --&gt; Critical[⚠️ CRITICAL: &lt;code&gt;after_script&lt;/code&gt; runs BEFORE upload stages.]

Critical --&gt; UploadCache[6. Upload cache&lt;br/&gt;&lt;small&gt;Always runs if configured.&lt;/small&gt;&lt;br/&gt;&lt;small&gt;Failure may affect job status.&lt;/small&gt;]

Critical --&gt; UploadArtifacts[7. Upload artifacts&lt;br/&gt;&lt;small&gt;Always runs if configured.&lt;/small&gt;&lt;br/&gt;&lt;small&gt;Failure may affect job status.&lt;/small&gt;]

UploadCache --&gt; UploadReferees[8. Upload referees&lt;br/&gt;&lt;small&gt;Always runs if configured.&lt;/small&gt;&lt;br/&gt;&lt;small&gt;Failure doesn't affect job status.&lt;/small&gt;]

UploadArtifacts --&gt; UploadReferees

UploadReferees --&gt; Cleanup[9. Cleanup operations&lt;br/&gt;&lt;small&gt;Always runs if configured.&lt;/small&gt;&lt;br/&gt;&lt;small&gt;Delete file-based variables.&lt;/small&gt;]

Cleanup --&gt; End([Job Complete])</code></pre></details></div>

셸 컨텍스트 격리#

각 셸 컨텍스트는 설계상 격리됩니다. 컨텍스트 간의 유일한 연결은 공유 작업 디렉토리 파일 시스템입니다.

  • 한 컨텍스트에서의 수동 변수 내보내기(예: export my_variable=$(date))는 다른 컨텍스트에서 사용할 수 없습니다.
  • 각 스크립트는 Unix 셸의 경우 set -eo pipefail로 실행되어 첫 번째 오류에서 일찍 실패합니다.
  • 각 단계의 결과는 이후 단계가 실행되는지 여부에 영향을 미치고 전체 작업 상태에 영향을 미칩니다.