InfoGrab Docs

튜토리얼: SBOM 형식으로 종속성 목록 내보내기

요약

종속성 스캔 출력을 CycloneDX JSON 형식으로 내보낼 수 있습니다. 이 튜토리얼에서는 파이프라인에 대한 CycloneDX JSON SBOM을 생성한 다음 CI job 아티팩트로 업로드하는 방법을 보여줍니다. 종속성 스캔을 설정합니다.

종속성 스캔 출력을 CycloneDX JSON 형식으로 내보낼 수 있습니다.

이 튜토리얼에서는 파이프라인에 대한 CycloneDX JSON SBOM을 생성한 다음 CI job 아티팩트로 업로드하는 방법을 보여줍니다.

시작하기 전에#

종속성 스캔을 설정합니다. 자세한 지침은 종속성 스캔 튜토리얼을 따르세요.

구성 파일 만들기#

  1. api 범위와 Developer 권한으로 개인 액세스 토큰을 만듭니다.

  2. 토큰 값을 PRIVATE_TOKEN이라는 CI/CD 변수로 추가합니다.

  3. 다음 코드로 스니펫을 만듭니다.

    파일 이름: export.sh

    #! /bin/sh
    
    function create_export {
      curl --silent \
      --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
      -X 'POST' --data "export_type=sbom" \
      "https://gitlab.com/api/v4/pipelines/$CI_PIPELINE_ID/dependency_list_exports" \
      | jq '.id'
    }
    
    function check_status {
      curl --silent \
        --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
        --write-out "%{http_code}" --output /dev/null \
        https://gitlab.com/api/v4/dependency_list_exports/$1
    }
    
    function download {
      curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
        --output "gl-sbom-merged-$CI_PIPELINE_ID.cdx.json" \
        "https://gitlab.com/api/v4/dependency_list_exports/$1/download"
    }
    
    function export_sbom {
      local ID=$(create_export)
    
      for run in $(seq 0 3); do
        local STATUS=$(check_status $ID)
        # JSON이 생성되면 상태는 200입니다.
        # JSON 생성 job이 실행 중이면 상태는 202입니다.
        if [ $STATUS -eq "200" ]; then
          download $ID
    
          exit 0
        elif [ $STATUS -ne "202" ]; then
          exit 1
        fi
    
        echo "Waiting for JSON to be generated"
        sleep 5
      done
    
      exit 1
    }
    
    export_sbom
    

    export.sh 스크립트는 다음 단계로 작동합니다:

    1. 현재 파이프라인에 대한 CycloneDX SBOM 내보내기를 만듭니다.
    2. 해당 내보내기의 상태를 확인하고 준비가 되면 중지합니다.
    3. CycloneDX SBOM 파일을 다운로드합니다.
  4. 다음 코드로 .gitlab-ci.yml을 업데이트합니다.

    export-merged-sbom:
      image: alpine
      before_script:
        - apk add --update jq curl
      stage: .post
      script:
        - |
          curl --header "Authorization: Bearer $PRIVATE_TOKEN" --output export.sh --url "https://gitlab.com/api/v4/snippets//raw"
        - /bin/sh export.sh
      artifacts:
        paths:
          - "gl-sbom-merged-*.cdx.json"
    
    
  5. 빌드 > 파이프라인으로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.

job 아티팩트에 gl-sbom-merged-<pipeline_id>.cdx.json 파일이 있어야 합니다.

튜토리얼: SBOM 형식으로 종속성 목록 내보내기

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

종속성 스캔 출력을 CycloneDX JSON 형식으로 내보낼 수 있습니다. 이 튜토리얼에서는 파이프라인에 대한 CycloneDX JSON SBOM을 생성한 다음 CI job 아티팩트로 업로드하는 방법을 보여줍니다. 종속성 스캔을 설정합니다.

종속성 스캔 출력을 CycloneDX JSON 형식으로 내보낼 수 있습니다.

이 튜토리얼에서는 파이프라인에 대한 CycloneDX JSON SBOM을 생성한 다음 CI job 아티팩트로 업로드하는 방법을 보여줍니다.

시작하기 전에#

종속성 스캔을 설정합니다. 자세한 지침은 종속성 스캔 튜토리얼을 따르세요.

구성 파일 만들기#

  1. api 범위와 Developer 권한으로 개인 액세스 토큰을 만듭니다.

  2. 토큰 값을 PRIVATE_TOKEN이라는 CI/CD 변수로 추가합니다.

  3. 다음 코드로 스니펫을 만듭니다.

    파일 이름: export.sh

    #! /bin/sh
    
    function create_export {
      curl --silent \
      --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
      -X 'POST' --data "export_type=sbom" \
      "https://gitlab.com/api/v4/pipelines/$CI_PIPELINE_ID/dependency_list_exports" \
      | jq '.id'
    }
    
    function check_status {
      curl --silent \
        --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
        --write-out "%{http_code}" --output /dev/null \
        https://gitlab.com/api/v4/dependency_list_exports/$1
    }
    
    function download {
      curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
        --output "gl-sbom-merged-$CI_PIPELINE_ID.cdx.json" \
        "https://gitlab.com/api/v4/dependency_list_exports/$1/download"
    }
    
    function export_sbom {
      local ID=$(create_export)
    
      for run in $(seq 0 3); do
        local STATUS=$(check_status $ID)
        # JSON이 생성되면 상태는 200입니다.
        # JSON 생성 job이 실행 중이면 상태는 202입니다.
        if [ $STATUS -eq "200" ]; then
          download $ID
    
          exit 0
        elif [ $STATUS -ne "202" ]; then
          exit 1
        fi
    
        echo "Waiting for JSON to be generated"
        sleep 5
      done
    
      exit 1
    }
    
    export_sbom
    

    export.sh 스크립트는 다음 단계로 작동합니다:

    1. 현재 파이프라인에 대한 CycloneDX SBOM 내보내기를 만듭니다.
    2. 해당 내보내기의 상태를 확인하고 준비가 되면 중지합니다.
    3. CycloneDX SBOM 파일을 다운로드합니다.
  4. 다음 코드로 .gitlab-ci.yml을 업데이트합니다.

    export-merged-sbom:
      image: alpine
      before_script:
        - apk add --update jq curl
      stage: .post
      script:
        - |
          curl --header "Authorization: Bearer $PRIVATE_TOKEN" --output export.sh --url "https://gitlab.com/api/v4/snippets//raw"
        - /bin/sh export.sh
      artifacts:
        paths:
          - "gl-sbom-merged-*.cdx.json"
    
    
  5. 빌드 > 파이프라인으로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.

job 아티팩트에 gl-sbom-merged-<pipeline_id>.cdx.json 파일이 있어야 합니다.