CLI 레퍼런스
September 13, 2026 · View on GitHub
BomLens의 전체 옵션과 분석 모드, CI/CD 통합 방법, 트러블슈팅을 설명합니다.
옵션 레퍼런스
./scripts/scan-sbom.sh [옵션]
Windows 사용자: 위 명령은 macOS/Linux 기준입니다. 다음 중 하나를 고르세요. 설치는 시작하기를 참고하세요.
./scripts/scan-sbom.sh를scripts\scan-sbom.bat로 바꿔 실행합니다 (Git Bash 필요).- WSL2에서는 명령을 그대로 실행합니다.
- CLI 없이 쓰려면
scripts\sbom-ui.bat을 더블클릭하거나 데스크톱 앱을 내려받으세요.
| 옵션 | 기본값 | 설명 |
|---|---|---|
--project <이름> | — | (필수) 프로젝트 이름 |
--version <버전> | — | (필수) 프로젝트 버전 |
--target <대상> | 현재 디렉터리 | 분석 대상: 디렉터리(소스 트리, 또는 OS rootfs·빌드 산출물 staging), Docker 이미지, 바이너리 파일, .zip/.tar.gz 아카이브. Yocto 빌드 디렉터리는 그렇게 인식해서, 빌드 트리를 훑는 대신 tmp/deploy/images/ 아래에 빌드가 만든 이미지 SBOM을 분석합니다(공급사 SBOM 가이드 참고) |
--git <url> | — | git/GitHub URL을 얕은 클론(shallow) 후 소스로 분석 (비공개 저장소: GIT_TOKEN 환경변수) |
--branch <ref> | 기본 브랜치 | --git 대상의 브랜치, 태그, 커밋 (별칭 --ref) |
--firmware | false | --target 파일을 펌웨어 모드로 강제 (opt-in 펌웨어 이미지) |
--analyze <sbom> | — | 공급사 SBOM 검증·분석 (별칭 --sbom). CycloneDX/SPDX. --target와 배타 |
--model <참조> | — | AI SBOM(CycloneDX 1.7 ML-BOM)을 생성한다. HuggingFace 모델 ID(조직/모델)는 OWASP AIBOM Generator로 처리한다(opt-in bomlens-aibom 이미지; 모델 카드 메타데이터를 네트워크로 가져옴). Figshare 항목은 페이지 주소나 DOI, 항목 번호로 주면 공개 항목 조회로 데이터셋으로 기술하며 계정도 별도 이미지도 필요 없다. 이름에 "figshare"가 없는 기관 DOI는 다른 DOI와 구분할 수 없으므로 항목 주소를 준다. --target/--analyze/--git/--merge와 배타 |
--model-file <경로> | — | AI 모델 파일 하나를 읽어 그 헤더만으로 기술한다. GGUF, safetensors, PyTorch(.pt/.pth/.ckpt), pickle, npz, npy, ONNX를 인식한다. 오프라인으로 동작하고 HuggingFace 계정이 필요 없어 공개하지 않은 모델도 스캔할 수 있다. 채울 수 있는 정보는 형식마다 다르다. GGUF는 이름과 라이선스, 아키텍처를 담고 있지만 safetensors는 대개 텐서 정보만 있으며, 파일이 선언하지 않은 값은 추측하지 않고 비워 둔다. --target에 .gguf나 .safetensors, .pt 같은 경로를 주면 이 방식으로 읽는다. --target/--analyze/--git와 배타 |
--license <spdx-id> | — | 프로젝트를 배포하는 배포 라이선스(예: Apache-2.0). SBOM 루트 컴포넌트에 기록하고, 조건이 충돌하는 의존성을 표시하는 데 쓴다. 소스 스캔으로는 알아낼 수 없어(cdxgen이 maven과 gradle에서 루트 라이선스를 비워 둔다) 지정하지 않으면 충돌 판정을 내리지 않는다. SBOM에 이미 있는 루트 라이선스(공급사가 선언한 값)는 덮어쓰지 않는다 |
--sbom-author <name> | — | 이 SBOM을 생성한 주체. 스캔을 실행하는 조직이나 사람을 가리키며, 도구도 소프트웨어를 만든 쪽도 아니다. metadata.authors에 정식 명칭으로 기록하고 약어는 쓰지 않는다. 스캔으로는 알아낼 수 없는 값이라 지정하지 않으면 자리표시자를 채우지 않고 필드를 빼 둔다 |
--usage <scenario> | — | AI 모델 위험 판정을 사용 형태에 맞춘다(--model과 --model-file): internal, product, redistribute, outputs-only. 그 사용 형태에 적용되는 라이선스 조건만으로 판정하고, 보고서에 어떤 형태 기준인지 명시한다. 지정하지 않으면 전체 조건 기준으로 판정한다 |
--merge <a.json> <b.json> … | — | CycloneDX SBOM 두 개 이상을 하나로 병합하고 purl 기준으로 중복을 제거한 뒤, 최상위 컴포넌트를 --project/--version으로 기재. 선택 기능으로, 외부 시스템이 제품당 단일 BOM을 요구할 때 씁니다. 그 외에는 층별로 따로 둡니다(서버 SBOM 작성 가이드 참고). --target/--analyze/--git와 배타 |
--merge-root <file> | — | --merge와 함께: 새 1.6 루트를 만드는 대신 이 입력 파일의 specVersion과 최상위 컴포넌트를 유지합니다(예: ML-BOM의 CycloneDX 1.7 루트와 모델 카드). --merge 입력 중 하나여야 하며, 유지된 루트의 이름과 버전은 --project/--version으로 바뀝니다 |
--diff <old.json> <new.json> | — | 이미 생성한 AI 모델 SBOM 두 개(--model 또는 --model-file 결과물)를 비교해 변동을 찾는다. bomlens:assessment:* 판정이 이전보다 나빠졌는지, 선언된 라이선스가 바뀌었는지, 그리고 같은 모델 이름·purl·HuggingFace ID인데 가중치 파일의 SHA-256 해시가 달라졌는지를 본다. 마지막 항목이 가장 중요한 신호로, 이름은 그대로인데 그 뒤의 실제 파일이 조용히 바뀌었다는 뜻이다. --project/--version도 스캔 대상도 필요 없으며, 새 쪽 파일 이름을 따서 <new>_model-diff.json을 만든다(위치는 현재 디렉터리, --output-dir 지정 시 그 아래) |
--generate-only | false | 업로드 없이 로컬에만 저장 |
--upload-target <대상> | dependency-track | 업로드 대상: dependency-track(DT 호환) 또는 trusca(네이티브 ingest) |
--trusca <project_id> | — | TRUSCA에 업로드(= --upload-target trusca + project id). API_URL과 Bearer API_KEY 필요 |
--notice | 위험분석보고서 기본값에 딸려 켜짐 | 오픈소스 고지문(NOTICE, txt+html) 생성. 플래그 자체의 기본값은 꺼짐이며, 기본으로 켜진 위험분석보고서가 이를 켠다. 그래서 끄려면 --notice를 빼는 게 아니라 --no-report를 써야 한다 |
--security | 위험분석보고서 기본값에 딸려 켜짐 | Trivy 보안 보고서(json+md+html) 생성. CVSS, EPSS, CISA KEV 우선순위 신호 포함. --notice와 같은 구조로, --no-report가 꺼야 꺼지고 플래그만 빼서는 꺼지지 않는다 |
--spdx | false | 최종 CycloneDX 결과를 변환한 SPDX 2.3 JSON(_bom.spdx.json)을 함께 생성 |
--all | — | --notice --security --spdx |
--no-report | false | 오픈소스위험분석보고서(risk-report) 생략 (아래 참고) |
--lang <en|ko> | en | 사람이 읽는 적합성·AI 준수 개요 보고서(.md/.html)의 언어. SBOM과 JSON 보고서는 언어와 무관하게 영어로 유지 |
--conformance-profile <default|skt-submission> | default | 적합성 검사 엄격도. skt-submission은 PURL 포함률 100%를 요구하고 pkg:generic 식별자가 하나라도 있으면 실패로 판정한다(SKT 공급사 제출 심사 기준과 동일). 웹 UI의 제출 전 점검 화면은 skt-submission이 기본값이지만 CLI는 아니므로, --analyze와 함께 명시적으로 지정해야 한다 |
--deep-license | false | scancode 정밀 라이선스 탐지 (opt-in 이미지) |
--deep-cve | false | grype의 NVD CPE 매칭으로 두 번째 대조를 더한다 (opt-in bomlens-deep-cve 이미지, 자동으로 내려받음). BomLens는 Maven 컴포넌트에만 NVD 대조가 가능한 CPE를 붙여 주므로, Trivy가 놓치는 NVD 전용 CVE는 대부분 오래된 Maven 라이브러리에서 나온다. --security를 자동으로 켠다. NVD 실시간 버전 범위로 확인하지 못한 결과는 보고서에 버전 미검증으로 표시된다 — 정밀 CVE 대조 가이드 참고 |
--identify-vendored | false | 패키지 매니저가 없는 C/C++ 소스에 복사돼 들어간(vendored) 오픈소스를 식별. 파일 지문을 OSSKB 서비스와 대조 (발행 이미지에 포함; 소스가 아니라 해시 전송). 내장 오픈소스 식별 가이드 참고 |
--verify-weights | false | --model과 함께 쓰면 저장소의 pickle 계열 가중치 파일(.bin/.pt/.pth/.ckpt, 로드 시 코드를 실행할 수 있는 형식)을 내려받아 --model-file이 실행하는 것과 같은 로컬 picklescan 검증을 돌린다. HuggingFace 자체 스캔 결과(bomlens:hf:scan:*)만 믿는 대신 독립적으로 확인하는 것이다. safetensors·GGUF·ONNX 가중치는 내려받지 않는다. 로드 시 코드를 실행하지 않는 형식이라 picklescan으로 확인할 대상이 없기 때문이다. 실제 네트워크·디스크 비용이 들고(AIBOM_VERIFY_MAX_FILES/AIBOM_VERIFY_MAX_BYTES로 상한, 기본 5개 파일 · 각 2GiB) 메타데이터만 읽는 ENRICH_HF_SECURITY 조회와 달리 옵트인이다. AI 모델 스캔 전용 |
--byte-stable | false | 결정론적(재현 가능) SBOM 출력 |
--sign | false | cosign 서명 (COSIGN_KEY 필요) |
--output-dir <dir> | 현재 디렉터리 | 산출물 베이스 디렉터리 (별칭 -o). 스캔마다 그 아래 {Project}_{Version}/ 하위 폴더에 묶여 저장되어 소스 트리를 오염시키지 않음 |
--timestamp | false | 실행 하위 폴더 이름에 _YYYYMMDD-HHMMSS를 덧붙여, 같은 프로젝트와 버전을 다시 스캔해도 덮어쓰지 않고 나란히 보관. 폴더 이름만 바뀌고 SBOM 내용은 그대로 |
--ui | — | 로컬 웹 UI 실행 |
--mount <dir> | — | --ui와 함께: 호스트 디렉터리를 웹 UI의 디렉터리 경로 입력에서 고를 수 있는 읽기 전용 스캔 대상으로 추가(여러 번 지정 가능). 실행 폴더 밖의 OS 트리를 스캔할 수 있고, --mount /로 실행 중인 호스트 OS도 스캔합니다. 결과는 그대로 실행 폴더에 저장됩니다 |
--help | — | 도움말 출력 |
환경변수로 동작을 조정할 수 있습니다.
| 환경변수 | 기본값 | 설명 |
|---|---|---|
SBOM_SCANNER_IMAGE | ghcr.io/sktelecom/bomlens:latest | 스캐너 이미지를 다른 태그로 재정의 |
SBOM_FIRMWARE_IMAGE | ghcr.io/sktelecom/bomlens-firmware:latest | 펌웨어 분석용 이미지 지정 |
SBOM_AIBOM_IMAGE | ghcr.io/sktelecom/bomlens-aibom:latest | AI 모델(ML-BOM) 생성용 이미지 지정 |
SBOM_DEEP_CVE_IMAGE | ghcr.io/sktelecom/bomlens-deep-cve:latest | --deep-cve(grype CPE 매칭)용 이미지 지정. 웹 UI의 같은 토글도 이 이미지를 쓴다 |
SBOM_OUTPUT_FLAT | — | 1로 두면 실행별 하위 폴더 없이 산출물을 베이스에 평면으로 저장(격리 이전 배치, 옛 경로를 기대하는 CI용) |
SBOM_OUTPUT_DIR | ~/sbom-output | 데스크톱 앱과 웹 UI의 산출물 베이스(CLI는 대신 --output-dir 사용). 스캔마다 그 아래 {Project}_{Version}/ 하위 폴더에 저장 |
SBOM_UI_MOUNT_DIR | — | CLI 인자를 받지 않는 Windows 실행 파일 sbom-ui.bat용: 웹 UI의 디렉터리 경로 입력에 읽기 전용 대상으로 추가할 폴더 하나(--ui --mount의 더블클릭 대응). `& ^ |
SBOM_LANG | 시스템 로캘 | Windows 런처와 데스크톱 앱의 언어. en 또는 ko. 한국어가 아니면 영어로 표시된다 |
SBOM_BASH | 자동 감지 | scan-sbom.bat용: Git Bash의 bash.exe 경로를 직접 지정(예: C:\Program Files\Git\bin\bash.exe). 런처가 PATH의 git으로 자동 감지를 시도했으나 WSL이나 WindowsApps 별칭이 아닌 실제 Git Bash를 못 찾았을 때 쓴다 |
SBOM_PULL | missing | 스캐너 이미지 다운로드 정책. scan-sbom.sh와 Windows 런처 모두에 적용된다. missing(기본)은 이미지가 없을 때만 받고, 이미 있으면 백그라운드에서 조용히 최신 여부를 확인한다(시간 상한을 두고 최선을 다하는 방식이라, 확인이 멎거나 오프라인이면 그냥 포기하고 로컬 이미지로 진행한다). always는 매번 멈춰서 다시 받고, 실패하면 실행 자체를 중단한다. never는 네트워크를 전혀 쓰지 않고, 이미지가 없으면 실행을 중단한다 |
SBOM_IMAGE_TAR | — | docker save로 만든 이미지 tar 경로. Windows 런처가 pull 대신 이 파일을 불러온다. 스크립트 옆에 bomlens-image.tar가 있으면 자동으로 사용한다. SBOM_PULL=never와 함께 쓰면 완전 오프라인 설치가 된다 |
CVE_BIN_TOOL_MODE | auto | 펌웨어 CVE 매칭 방식. auto는 번들 CVE 데이터베이스가 있으면 그걸 쓰고, 없으면 네트워크에 닿을 때 NVD에서 내려받음. offline은 번들 데이터베이스로만 매칭. online은 항상 네트워크에서 갱신. components-only는 CVE 매칭을 건너뛰고 구성요소만 담은 SBOM을 생성 |
CVE_BIN_TOOL_HOME | /opt/cve-bin-tool-home | 번들 cve-bin-tool CVE 데이터베이스 위치. cve-bin-tool은 캐시를 HOME 기준으로 잡으므로 $CVE_BIN_TOOL_HOME/.cache/cve-bin-tool/cve.db를 읽음 |
CVE_BIN_TOOL_DISABLE_SOURCES | GAD,OSV | 펌웨어 스캔에서 비활성화할 cve-bin-tool 데이터 출처. GAD(GitLab Advisory)와 OSV는 식별 과정이 네트워크로 나가지 않도록 기본 비활성화 |
SCANOSS_API_URL | OSSKB 무료 API | --identify-vendored의 엔드포인트. 에어갭·대량 사용 시 SCANOSS 상용·자체 호스팅 엔드포인트로 지정 |
SCANOSS_API_KEY | — | SCANOSS_API_URL이 요구하는 경우의 자격 증명 |
SCANOSS_MIN_FILES | 2 | 라이브러리를 보고하기 위해 매치돼야 하는 최소 파일 수. 단발성 다운스트림 포크 노이즈를 거른다. 1로 두면 단일 파일 매치도 모두 유지 |
GIT_TOKEN | — | 비공개 git 저장소 클론에 쓰는 토큰 |
HF_TOKEN | — | --model과 AI SBOM 분석의 데이터셋 메타데이터 조회에 쓰는 HuggingFace read 토큰. 비공개·게이트 저장소에 필요하며, 모델을 공개하기 전 검토할 때 쓴다. HUGGING_FACE_HUB_TOKEN도 별칭으로 받는다 |
ENRICH_HF_SECURITY | true | --model 스캔에서 HuggingFace가 자체 실행한 파일 보안 스캔 결과(파일별 ClamAV·picklescan)를 읽어 ML-BOM에 기록한다. 메타데이터만 읽고 파일은 내려받지 않는다. false면 조회를 건너뛴다 |
AIBOM_VERIFY_MAX_FILES | 5 | --verify-weights에서 모델당 내려받아 스캔할 pickle 계열 가중치 파일의 최대 개수. 상한을 넘는 나머지 파일은 대기열에 넣지 않고 그냥 확인하지 않는다 |
AIBOM_VERIFY_MAX_BYTES | 2147483648(2GiB) | --verify-weights에서 이 크기를 넘는 가중치 파일(저장소가 선언한 크기든 실제로 내려받은 크기든)은 내려받거나 스캔하지 않고 건너뛴다 |
COSIGN_KEY | — | --sign에 쓰는 서명 키 경로 |
FETCH_LICENSE | true | 소스 스캔 시 의존성 라이선스를 자동 조회. false면 조회를 생략해 속도를 높임 |
GOTOOLCHAIN | auto | Go 소스 스캔에서 모듈을 해석할 Go 툴체인. 기본값에서는 go.mod가 스캐너 이미지보다 새 Go를 요구하면 그 버전을 내려받는다. local이면 이미지에 든 Go만 쓰고, 이런 프로젝트는 의존성 해석이 실패한다 |
GOPROXY | https://proxy.golang.org,direct | Go 소스 스캔에서 모듈과 툴체인을 내려받을 프록시. proxy.golang.org에 접근할 수 없는 사내망에서 지정한다. GOSUMDB도 같은 방식으로 전달된다 |
PROJECT_LICENSE | — | --license와 같다. 프로젝트의 배포 라이선스를 SPDX 식별자로 지정한다. bomlens:licenseConflict 판정과 위험 보고서의 충돌 절을 만든다 |
SBOM_AUTHOR | — | --sbom-author와 같다. SBOM을 생성한 주체를 metadata.authors에 기록한다 |
SECURITY_ENRICH | true | 보안 보고서에 EPSS와 CISA KEV 신호를 보강. 폐쇄망에서는 false로 외부 조회 생략 |
SECURITY_NVD_VERIFY | false | --deep-cve와 함께: grype의 nvd:cpe 결과를 NVD 실시간 버전 범위와 대조해 범위 밖 오탐을 걸러낸다 (NVD_API_KEY와 네트워크 필요, 수 분 추가). 기본은 꺼짐 — 결과를 버리지 않고 버전 미검증으로 표시한다 |
NVD_API_KEY | — | SECURITY_NVD_VERIFY에 쓰는 NVD API 키. 컨테이너에 이름으로만 전달하며 명령줄에 노출하지 않는다 |
API_URL | — | 업로드 서버 주소(DT 서버 또는 TRUSCA base) |
API_KEY | — | 업로드 자격. DT는 X-Api-Key, TRUSCA는 Bearer 토큰으로 쓰임 |
UPLOAD_TARGET | dependency-track | 업로드 대상: dependency-track 또는 trusca |
TRUSCA_PROJECT_ID | — | TRUSCA 프로젝트 id(UUID). trusca일 때 필수 |
TRUSCA_REF | main | ingest ref 라벨 |
TRUSCA_RELEASE | --version 값 | ingest release 라벨 |
EXTERNAL_LOOKUP | true | --ui와 함께: 웹 UI의 CVE·패키지 조회 기능을 켠다. 필요할 때 osv.dev로 조회한다. 폐쇄망에서는 false로 끈다 |
SBOM_UPLOAD_TTL_HOURS | 24 | --ui와 함께: 스캔을 시작하지 않은 업로드 파일(선택만 하고 방치된 업로드)을 보관하는 시간. 최소 1로 제한된다 |
BOMLENS_MAVEN_FULL_GRAPH 같은 소스 스캔 의존성 해석 옵션은 Docker 이미지 환경 변수에 정리돼 있습니다. scan-sbom.sh를 실행하는 셸에서 설정하면 같은 방식으로 의존성 해석에 적용됩니다.
Windows에서는 명령 프롬프트에서 설정한 환경변수가 더블클릭 실행에는 적용되지 않습니다.
그래서 런처는 UI_PORT, SBOM_LANG, SBOM_PULL, SBOM_IMAGE_TAR, SBOM_SCANNER_IMAGE,
SBOM_OUTPUT_DIR, SBOM_UI_MOUNT_DIR을 텍스트 파일에서도 읽습니다.
scripts/bomlens.settings.example.txt를 스크립트 옆에 bomlens.settings.txt로 복사하거나
%USERPROFILE%\.bomlens\settings.txt에 두면 됩니다. 실제 환경변수가 있으면 그쪽이 우선합니다.
출력 플래그 상세는 보고서 생성 가이드를, 공급사 SBOM 검증은 공급사 SBOM 검증을 참고하세요.
산출물 위치
스캔마다 자체 {Project}_{Version}/ 하위 폴더에 격리되므로, 한 번 실행에서 나온 파일이 한곳에 모이고 CLI가 스캔하는 소스 트리를 오염시키지 않습니다. 이 하위 폴더는 베이스 디렉터리 아래에 만들어집니다.
- CLI(
scan-sbom.sh): 베이스는 명령을 실행한 디렉터리입니다.--output-dir <dir>(별칭-o)로 바꿉니다. - 데스크톱 앱과 웹 UI: 베이스는
~/sbom-output(Windows는C:\Users\<사용자>\sbom-output)입니다.SBOM_OUTPUT_DIR환경변수로 바꿉니다.
--git이나 아카이브 수집 시에도 클론과 해제는 종료할 때 정리되는 임시 디렉터리에서 이뤄지고, 출력 하위 폴더만 남습니다.
같은 프로젝트와 버전을 다시 스캔하면 기본적으로 그 하위 폴더를 덮어써 최신 결과만 남깁니다. 매번 따로 보관하려면 --timestamp를 붙입니다. 폴더 이름에 _YYYYMMDD-HHMMSS가 덧붙어, 예를 들어 MyApp_1.0.0_20260626-143000/가 됩니다. 이 옵션은 폴더 이름만 바꿀 뿐 SBOM 파일 이름과 내용은 그대로라서 --byte-stable과 함께 쓸 수 있습니다.
이전의 평면 배치, 즉 하위 폴더 없이 베이스에 파일을 바로 저장하던 방식으로 되돌리려면 SBOM_OUTPUT_FLAT=1을 설정합니다. 옛 경로를 기대하는 CI를 위한 옵션입니다.
--diff는 프로젝트와 버전이 따로 없으므로 실행별 하위 폴더가 아니라 베이스 디렉터리(현재 디렉터리, 또는 --output-dir)에 바로 보고서를 씁니다.
특정 버전의 스캐너 이미지 사용
스캐너 이미지는 SBOM_SCANNER_IMAGE 환경변수로 재정의합니다.
SBOM_SCANNER_IMAGE="ghcr.io/sktelecom/bomlens:<version>" \
./scripts/scan-sbom.sh --project "MyApp" --version "1.0.0" --generate-only
트러블슈팅
Windows: 산출물이 생기지 않음
스캔이 끝났는데 산출물 파일이 PC에 보이지 않으면, 실행 폴더가 Docker 파일 공유에 포함된 경로인지 확인하세요. 홈 디렉터리(C:\Users\...) 아래는 Rancher Desktop과 Docker Desktop 모두 기본 공유되므로 안전합니다. 공유되지 않은 위치에서 실행하면 컨테이너가 결과를 호스트에 쓰지 못합니다.
Docker 권한 오류 (Linux/WSL2)
Got permission denied while trying to connect to the Docker daemon
Rancher Desktop이나 Docker Desktop을 쓰는 Windows/macOS에는 해당하지 않습니다. 현재 사용자를 docker 그룹에 추가합니다.
sudo usermod -aG docker $USER
newgrp docker
디스크 공간 부족
no space left on device
Docker 캐시를 정리합니다. 터미널이 있다면:
docker system prune -f
Rancher Desktop이나 Docker Desktop을 쓴다면 앱의 설정(Preferences) 화면에서도 같은 정리를 할 수 있습니다.
그 밖의 문제
VERBOSE=true ./tests/test-scan.sh로 상세 로그를 확인합니다.- Docker 이미지를 최신 버전으로 업데이트합니다:
docker pull ghcr.io/sktelecom/bomlens:latest - 해결되지 않으면 GitHub Issues에 환경 정보와 로그를 첨부해 제보해 주세요.
모드별 사용법은 입력 시나리오 가이드, 산출물 종류는 산출물 레퍼런스, 언어 감지는 지원 생태계, 파이프라인에서 실행하는 방법은 CI/CD 연동을 참고하세요.