pipelinectl

pipelinectl DevSecOps 파이프라인에서 태스크와 규정 준수 자동화 스크립트 간에 데이터를 공유하는 데 사용할 수 있는 경량 키-값 저장소입니다.

이 도구가 사용되는 위치에 대한 자세한 정보는 파이프라인에 테스트 및 빌드 단계 추가 를 참조하십시오.

Cloud Object Storage 파이프라인 데이터 구성

Cloud Object Storage (COS)는 빌드 아티팩트, 테스트 보고서, 중간 파일과 같은 파이프라인 데이터를 위한 무제한의 영구 저장소를 제공합니다. 기본 로컬 스토리지와 달리, COS 기반 파일은 파이프라인 실행 간에도 유지되며 서로 다른 파이프라인 간에 공유할 수 있습니다.

pipelinectl COS 버킷을 명시적인 영구 저장소로 지원하는 명령어는 다음과 같습니다:

감사 및 규정 준수 요건으로 인해 데이터 COS 버킷은 증거 보관소 버킷과 별도로 관리되어야 합니다.

파이프라인 데이터에 대한 COS 구성

pipelinectl 파일 작업과 함께 COS를 사용하려면 다음 구성 단계를 완료하십시오:

  1. 데이터 버킷 생성
  • 기존의 Cloud Object Storage 인스턴스를 사용하거나 새 인스턴스를 생성할 수 있습니다. “ Cloud Object Storage 구성” 문서의 지침에 따라 다음을 수행하십시오:
  • 데이터 버킷을 생성합니다(증거 보관소 버킷과는 별도로 생성해야 함)
  • 버킷에 대한 서비스 자격 증명을 생성합니다
  1. IAM 권한 구성

데이터 버킷에 대한 서비스 자격 증명에 Writer, Object Writer, ReaderContent Reader 역할을 할당하십시오.

자세한 내용은 ‘버킷 액세스 권한’을 참조하세요.

  1. 환경 속성 구성

DevSecOps 파이프라인에 다음 환경 속성을 추가하세요:

특성 유형 설명
data-cos-api-key 보안 귀하의 COS API 키 서비스 자격 증명서의 API 키
data-cos-bucket-name 텍스트 버킷 이름 데이터 버킷 이름
data-cos-endpoint 텍스트 COS 엔드포인트 URL 버킷이 위치한 리전의 엔드포인트

COS 엔드포인트 URL 를 찾으려면, 버킷의 ‘구성’ 페이지로 이동하여 해당 버킷이 속한 리전의 엔드포인트를 복사하세요(예: s3.us-south.cloud-object-storage.appdomain.cloud). 더 나은 성능과 보안을 위해 가능하면 직접 엔드포인트나 비공개 엔드포인트를 사용하세요.

민감한 인증 정보를 보호하기 위해 API 키를 보안 속성으로 저장하십시오.

  1. 버킷 수명 주기 구성 (권장)

오래된 파이프라인 데이터를 자동으로 삭제하도록 라이프사이클 정책을 설정합니다. 대부분의 파이프라인 데이터에는 7일 만료 규칙을 적용하는 것이 좋습니다. 자세한 내용은 ‘라이프사이클 정책’을 참조하십시오.

COS 데이터 범위 이해

save_resultset_env 명령어는 개별 파이프라인 실행 단위로 범위가 자동으로 제한되는 반면, COS 백엔드(--storage=cos)를 사용하는 파일 작업은 모든 파이프라인 실행에 걸쳐 유지되는 공유 버킷에서 수행됩니다.

주요 행동:

자동 실행 격리 기능 없음: 서로 다른 파이프라인 실행에서 동일한 키로 저장된 파일은 서로 덮어씁니다.

공유 버킷 네임스페이스: 동일한 COS 구성을 사용하는 모든 파이프라인 실행은 동일한 버킷 네임스페이스를 공유합니다.

영구 저장소: 파일은 명시적으로 삭제되거나 버킷 수명 주기 규칙에 따라 만료될 때까지 COS에 유지됩니다.

범위 비교:

표 1. 명령 범위 비교
명령 범위 Persistence
save_result 단일 파이프라인 실행 달리기 전용
set_env 단일 파이프라인 실행 달리기 전용
save_file (지역) 단일 파이프라인 실행 달리기 전용
save_file --storage=cos 모든 실행에 걸쳐 공유됨 지속적

list_files --storage=cos 를 사용하면, 이 명령어는 현재 파이프라인 실행에서 생성된 파일뿐만 아니라 설정된 버킷에 있는 모든 파일을 반환합니다. 접두사 필터를 사용하여 검색 결과를 좁히세요.

COS 파일 작업에 대한 모범 사례

Cloud Object Storage 에서 파일을 효과적으로 정리하고 관리하며 의도치 않은 데이터 덮어쓰기를 방지하려면 다음 모범 사례를 따르세요.

충돌 방지

데이터 덮어쓰기 및 충돌을 방지하려면:

  • 키에 고유 식별자(예: 파이프라인 실행 ID, 타임스탬프)를 포함합니다
  • 계층적 키 패턴을 사용하십시오: project/component/run-id/filename
  • build-artifact 와 같이 한정어가 없는 일반적인 키는 피하십시오

갈등의 예:

# Pipeline Run 1
save_file --storage=cos build-artifact ./dist/app-v1.0.0.tar.gz
# Pipeline Run 2 (overwrites Run 1's file!)
save_file --storage=cos build-artifact ./dist/app-v2.0.0.tar.gz

안전한 사용 예시:

# Pipeline Run 1
save_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}" ./dist/app-v1.0.0.tar.gz
# Pipeline Run 2 (separate key, no conflict)
save_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}" ./dist/app-v2.0.0.tar.gz

주요 명명 규칙

계층적 패턴 사용

설명적이고 계층적인 키 이름을 사용하여 파일을 정리하세요:

# Good: Organized, descriptive
save_file --storage=cos "artifacts/build/${PIPELINE_RUN_ID}/app.tar.gz" ./dist/app.tar.gz
save_file --storage=cos "reports/security/${BUILD_NUMBER}/scan.json" ./scan-results.json
# Avoid: Flat, generic
save_file --storage=cos "artifact" ./dist/app.tar.gz

고유 식별자 포함

변수를 사용하여 파이프라인 실행마다 키가 고유하도록 설정합니다:

  • 파이프라인 실행 ID: ${PIPELINE_RUN_ID}
  • 빌드 번호: ${BUILD_NUMBER}
  • 시간: $(date +%Y%m%d-%H%M%S)
  • Git 커밋 SHA: ${GIT_COMMIT}

설명적인 이름을 사용하세요

파일의 용도를 명확하게 나타내는, 의미 있는 이름을 선택하세요:

# Good: Clear purpose
save_file --storage=cos "ui-service-image-${VERSION}" ./image.tar
# Avoid: Ambiguous
save_file --storage=cos "img" ./image.tar

예약된 접두사는 사용하지 마십시오

devsecops-pipeline-data/ 로 시작하는 키(예: devsecops-pipeline-data/path/to/file)는 사용하지 마십시오. devsecops-pipeline-data/ 접두사는 내부 파이프라인 작업용으로 예약되어 있습니다. 예약된 접두사를 사용하면 데이터 손상이 발생하거나 파이프라인 오류가 발생할 수 있습니다.

필터링 및 검색

파일 목록을 표시할 때 접두사 기반 필터링을 사용하여 결과를 좁히세요:

# List all artifacts for a specific project
list_files --storage=cos "myproject/artifacts/"
# List security reports for a specific date
list_files --storage=cos "reports/security/2024-01-15"

임시 파일을 직접 삭제합니다

더 이상 필요하지 않은 파일은 명시적으로 삭제하십시오:

remove_file --storage=cos "temp/build-${PIPELINE_RUN_ID}/cache.tar"

보안 고려사항

  • API 키 관리: data-cos-api-key 는 항상 보안 속성으로 저장하십시오. 스크립트나 구성 파일에 API 키를 절대 하드코딩하지 마십시오.
  • 최소 권한 원칙: 위에 나열된 필수 IAM 권한만 부여하십시오.
  • 버킷 분리: 증거 보관소 버킷과는 별도로, 파이프라인 데이터 전용 버킷을 사용하십시오.

사용량

pipelinectl은 단일 바이너리를 제공합니다. 해당 동작은 이름에 따라 다릅니다 ( busybox에서와 같이). pipelinectl로 호출되면 프로그램을 첫 번째 인수로 제공해야 합니다(예: pipelinectl get_data).

사용 가능한 별명 및 메소드:

set_env

# <key>: The name of the environment variable e.g. pipeline-namespace, app-name
# <value>: Value of the key
set_env <key> # reads <value> from `stdin`
set_env <key> <value>

나중에 get_env로 검색할 수 있는 임의의 문자열을 저장합니다.

인수가 <value> 누락된 경우 표준 입력에서 읽습니다 set_env. set_env 또한 한 번에 설정할 여러 키-값 쌍을 전달하는 것도 지원합니다.

예:

# set value provided as argument
set_env app-name "my-app-name"
# set value provided via stdin
echo "my-app-name" | set_env app-name
set_env my-api-key < /config/my-api-key
# set multiple key value pairs
set_env key-1 "value-1" \
  key-2 "value-2" \
  key-n "value-n"

set_envc

# <key>: The name of the environment variable e.g. pipeline-namespace, app-name
# <value>: Value of the key
set_envc <key> # reads <value> from `stdin`
set_envc <key> <value>

나중에 get_env. 한 번 저장된 set_envc 값은 이후의 set_env / set_envc 호출로 변경할 수 없습니다.

인수가 <value> 누락된 경우 표준 입력에서 읽습니다 set_envc. set_envc 또한 한 번에 설정할 여러 키-값 쌍을 전달하는 것도 지원합니다.

  • 한 번 설정된 키는 이후의 또는 set_envc``set_envc 호출로 덮어쓸 set_env 수 없습니다.
  • set_env로 한 번 설정된 변수는. set_envc 로 덮어쓸 수 없습니다.

예:

# set value provided as argument
set_envc app-name "my-app-name"
# set value provided via stdin
echo "my-app-name" | set_envc app-name
set_envc my-api-key < /config/my-api-key
# set multiple key value pairs
set_envc key-1 "value-1" \
  key-2 "value-2" \
  key-n "value-n"

get_env

# <key>: The name of the environment variable e.g. pipeline-namespace, app-name
get_env <key> [default]

다음 순서로 저장된 구성 값을 인쇄합니다.

  • set_env가 이전에 key와 함께 사용된 경우, 이 값을 검색합니다.
  • $CONFIG_DIR/$key 파일을 읽으려고 합니다(CONFIG_DIR의 기본값을 /config로 설정).
  • 지정된 기본값(있는 경우) 을 인쇄합니다.
  • 오류 메시지를 출력하고, 0이 아닌 종료 코드를 반환합니다

예:

get_env app-name "default-app-name"

리스트_엔브이

list_env

set_env 프로세스에서 저장된 키와 환경 변수를 표시합니다.

예:

list_env

비밀 설정

# <key>: The name of the secret e.g. artifactory-token, (short-lived) iam-token
# <value>: Value of the secret
set_secret <key> # reads <value> from `stdin`
set_secret <key> <value>

나중에 검색할 수 있는 비밀을 저장합니다 get_secret.

<value> 인수가 누락된 경우, set_secret 는 표준 입력에서 해당 값을 읽어옵니다.

  • set_secret 에서 설정한 콘텐츠는 직렬화되지 않으므로 하위 파이프라인/비동기 파이프라이너런에서 사용할 수 없습니다.
  • 이 명령어를 호출할 때 디버그 로깅을 비활성화하여, 저장된 비밀 정보가 디버그 로그에도 표시되지 않도록 하십시오.
  • 스크립트 및 로직이 set_secret 의 출력에 의존하지 않도록 합니다( ::add-mask:: 기능을 사용하여 비밀 값을 마스킹하기 위해 수행되는 인쇄문이 있습니다)

예:

# set value provided as argument
set_secret my-secret-key "my-secret-content"
# set value provided via stdin
echo "my-secret-content" | set_secret my-secret
set_secret my-api-key < /config/my-api-key
# set multiple key value pairs
set_secret secret-key-1 "value-1" \
  secret-key-2 "value-2" \
  secret-key-n "value-n"

비밀번호 가져오기

# <key>: The name of the secret set with set_secret or set as Secure Value in pipeline UI
get_secret <key> [default]

저장된 비밀값을 (다음 순서대로) 가져옵니다:

  • set_secret가 이전에 key와 함께 사용된 경우, 이 값을 검색합니다.
  • $SECRET_CONFIG_DIR/$key 파일을 읽으려고 합니다(SECRET_CONFIG_DIR의 기본값을 /config/secure-properties로 설정).
  • 지정된 기본값(있는 경우) 을 인쇄합니다.
  • 오류 메시지를 출력하고, 0이 아닌 종료 코드를 반환합니다

예:

get_secret cookie-token "default-token"
get_secret specific-account-ibmcloud-api-key "$(get_secret ibmcloud-api-key "")"

비밀 값이 포함된 변수는 항상 따옴표로 묶어야 합니다

쉘 변수에 비밀 값을 저장한 후 해당 변수를 사용할 때는 항상 큰따옴표로 묶어야 합니다. 따옴표를 사용하지 않으면 셸이 해당 값을 명령어에 전달하기 전에 여러 단어로 나누어 처리할 수 있습니다.

비밀 값이 포함된 변수는 따옴표로 묶지 않은 상태로 사용하지 마십시오.

export API_KEY=$(get_secret my-api-key)
# Unsafe: a multi-line secret value is not passed intact.
# Parts of the secret may appear unmasked in the pipeline log.
some-cli login --apikey $API_KEY

값을 그대로 유지하려면 변수를 항상 따옴표로 묶어 주세요.

export API_KEY=$(get_secret my-api-key)
# Safe: the value is passed as a single, intact string.
some-cli login --apikey "$API_KEY"

이 규칙은 변수가 사용되는 모든 곳, 즉 명령어 인수, 문자열 보간, 또는 파일에 값을 기록할 때에도 동일하게 적용됩니다.

# Safe
curl -H "Authorization: Bearer $API_KEY" https://example.com/api
echo "$API_KEY" > /tmp/credentials.txt

비밀 목록

list_secrets

set_secret 프로세스에서 저장된 키와 보안 값 유형 환경 변수를 파이프라인 UI에 표시합니다.

예:

list_secrets

비밀번호 제거

remove_secret <key>

이 명령은 set_secret 을 사용하여 저장한 파이프라인넥스트 내부에 저장된 비밀을 설정 해제합니다.

save_file

# <identifier>: Name used to store and retrieve the file (for example, 'build-artifact', 'my-report')
# <path>: Path to the file on the local filesystem (for example, './dist/app.tar.gz')
save_file <identifier> <path>

나중에 load_file을 사용하여 검색할 수 있는 임의의 파일을 저장합니다.

디렉토리는 지원되지 않습니다.

로컬 저장소 (기본값):

파일은 파이프라인 작업 공간에 저장되며, 현재 파이프라인 실행에 한정됩니다.

save_file some_config ./config.yaml

COS 스토리지:

파일은 Cloud Object Storage 에 저장되며, 파이프라인 실행 간에도 유지됩니다. 공유 버킷의 동작 방식에 대한 중요한 정보는 ‘데이터 범위 및 지속성’을 참조하십시오.

필수 조건: COS가 구성되어 있는지 확인하십시오. Cloud Object Storage 구성 항목을 참조하십시오.

# Save with run-specific key
save_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}" ./dist/app-v1.2.3.tar.gz
# Save with hierarchical key
save_file --storage=cos "artifacts/ui-service/${BUILD_NUMBER}/image.tar" ./image.tar
# Save report with timestamp
save_file --storage=cos "reports/security/$(date +%Y%m%d)/scan.json" ./scan-results.json

load_file

# <identifier>: Name of the file to retrieve (for example, 'build-artifact', 'my-report')
load_file <identifier>

저장된 파일을 stdout에 인쇄합니다.

로컬 저장소 (기본값):

현재 실행에 대한 파이프라인 작업 공간에 저장된 파일을 가져옵니다.

load_file some_config > some_config.yaml

COS 스토리지:

Cloud Object Storage 에서 파일을 가져옵니다.

필수 조건: COS가 구성되어 있는지 확인하십시오. Cloud Object Storage 구성 항목을 참조하십시오.

# Load file and print to stdout
load_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}"
# Load file and save to local filesystem
load_file --storage=cos "artifacts/ui-service/${BUILD_NUMBER}/image.tar" > ./downloaded-image.tar

목록_파일

save_file 을 통해 저장된 모든 저장된 파일을 나열하며, 선택적으로 키 접두사를 기준으로 필터링합니다.

# <prefix>: (optional) Filter results to keys starting with this prefix
list_files <prefix>

stdout 에 파일 키 목록을 출력합니다.

로컬 저장소 (기본값):

현재 실행에 대한 파이프라인 작업 공간에 저장된 파일을 나열합니다.

list_files # lists all saved files
list_files saved-reports- # lists files with "saved-reports-" prefix

COS 스토리지:

Cloud Object Storage 에 있는 파일 목록을 표시합니다. 현재 파이프라인 실행에서 생성된 파일뿐만 아니라, 설정된 버킷에 있는 모든 파일을 반환합니다. 선택 사항인 접두사 매개변수를 사용하여 결과를 필터링하고 특정 파일로 범위를 좁힐 수 있습니다.

필수 조건: COS가 구성되어 있는지 확인하십시오. Cloud Object Storage 구성 항목을 참조하십시오.

# List all files in bucket (may include files from multiple runs)
list_files --storage=cos
# List files with specific prefix to narrow results
list_files --storage=cos "artifacts/ui-service/"
# List files for specific date
list_files --storage=cos "reports/security/20240115"

remove_file

저장된 파일을 삭제합니다.

# <identifier>: Name of the file to remove (for example, 'build-artifact', 'my-report')
remove_file <identifier>

로컬 저장소 (기본값):

현재 실행에 대한 파이프라인 작업 공간에서 파일을 삭제합니다.

remove_file my-report

COS 스토리지:

Cloud Object Storage 에서 파일을 삭제합니다.

필수 조건: COS가 구성되어 있는지 확인하십시오. Cloud Object Storage 구성 항목을 참조하십시오.

# Remove specific file
remove_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}"
# Remove temporary file
remove_file --storage=cos "temp/cache-${BUILD_NUMBER}.tar"

save_repo

# <key>:  Key of the repository e.g. repository name
# <prop>: Type of the property, e.g. url, branch, commit etc.
# <value>: Value of the property
save_repo <key> [<prop>=<value> ...]

파이프라인을 사용하여 새 저장소를 등록하거나 기존 저장소를 업데이트합니다.

지원되는 특성:

  • url: 리포지토리를 복제하는 데 사용할 수 있는 URL.
  • path: 작업공간 루트에 상대적인 복제된 저장소의 위치입니다.

다른 속성 이름도 사용할 수 있지만, 이름 충돌을 방지하기 위해 해당 이름 앞에 서비스별 식별자를 붙여야 합니다. 예를 들어, foo 대신 my-service.foo 을 사용해야 합니다.

예:

save_repo app_ui "url=${REPO_URL}" "path=app_ui_repo"
save_repo app_ui "branch=${REPO_BRANCH}"
save_repo app_ui "commit=${REPO_SHA}"
# any additional property can be added
save_repo app_ui "commit=${REPO_SHA}"

stdin을 값 소스로 사용

다음 조건이 true인 경우 stdin에서 값을 제공할 수 있습니다.

  • 명령에 대한 컨텐츠가 스트림됩니다.
  • 하나의 특성에 값이 없으며 =

예:

command_with_large_output | save_repo app_ui "issues"
# this also works with multiple properties,
# but stdin can provide value for only a single one
command_with_large_output | save_repo app_ui "issues" "result=success" "commit=${REPO_SHA}"

= 에서 여러 값이 누락된 경우 stdin 의 값에 속하는 특성을 판별할 수 없으므로 명령이 오류와 함께 종료됩니다.

값이 없지만 여전히 = 를 추가하는 특성에는 값으로 빈 문자열이 있습니다.

save_repo app_ui "bar="
load_repo app_ui bar # returns an empty string

list_repos

list_repos

저장된 저장소의 <key>stdout 에 나열합니다.

예:

list_repos
# returns the list of stored repository keys to stdout for example:
#  app_ui
#  app_repo

load_repo

# <key>: Key of the repository, e.g. repository name
# <prop>: Name of the property, e.g. commit, branch, url
load_repo <key> [<prop>]

저장소의 지정된 속성 값을 인쇄합니다. 저장소만 제공된 경우 저장소에 사용 가능한 모든 속성을 나열합니다. 제공된 저장소 또는 속성이 유효하지 않은 경우 일치하는 속성을 찾을 수 없음을 나타내는 오류를 반환합니다.

설명:

  • 값이 지정된 경우, 리포지토리의 지정된 속성 값을 출력합니다.
  • 만 지정된 경우, 해당 저장소의 사용 가능한 모든 속성을 나열합니다.
  • 지정된 <key> 가 유효하지 않은 경우, 일치하는 속성이 발견되지 않았음을 나타내는 오류를 반환합니다.

예제 1: 특정 속성 가져오기:

REPO_SHA=$(load_repo app_ui commit)

예제 2: 주어진 저장소의 모든 속성 나열:

REPO_SHA=$(load_repo app_ui)

list_repos 과 함께 사용하여 속성 값을 검색합니다.

#
# iterate over all repos and print their URLs
#
while read -r key; do
  url=$(load_repo $key url)
  echo "Repository saved as '$key' is at: '$url'"
done < <(list_repos)

콘솔에 다음 행을 출력합니다.

특정 속성을 검색할 때:

 Repository saved as 'my-frontend' is at: 'github.com/my-team/frontend'
 Repository saved as 'my-backend' is at: 'github.com/my-team/backend'

지정된 저장소의 모든 속성을 나열하는 경우:

 Properties available for '$key'.

save_result

# <stage>: Stage name e.g. test, detect-secrets, static-scan
# <path>: Path where will be stored the file, string
save_result  <stage> <path>

특정 단계에 대한 임의의 테스트 및 스캔 결과 파일을 저장합니다. 나중에 이 파일은 load_result 에서 불러올 수 있습니다. 기본적으로 데이터는 작업 공간 상대 경로를 키로 하여 저장됩니다.

PIPELINECTL_USE_PATH_AS_KEY 기능 플래그를 사용하여 데이터는 제공된 경로를 키로 사용하여 저장됩니다.

예:

#
# save the contents of the file ./results/mocha_results.json
# as an entry named "mocha_results.json" for the "test" stage
#
save_result test ./results/mocha_results.json
#
# save the contents of the file ../data/coverage.xml
# as an entry named "coverage.xml" for the "test" stage
#
save_result test ../data/coverage.xml
#
# Using the `PIPELINECTL_USE_PATH_AS_KEY` environment variable
# save the contents of the file ../data/coverage.xml
# as an entry named "../data/coverage.xml" for the "test" stage
#
PIPELINECTL_USE_PATH_AS_KEY=1 save_result test ../data/coverage.xml

list_results

# <stage>: Stage name
list_results <stage>

특정 스테이지에 저장된 파일 이름을 나열합니다.

예:

list_results test
# mocha_results.json
# coverage.xml

load_result

# <stage>: Stage name e.g. test, detect-secrets, static-scan
# <file>: File name e.g. mocha_results.json
load_result <stage> <file>

저장된 파일 키를 stdout으로 인쇄합니다. 기본적으로 키는 save_result``에 지정된 파일 경로의 작업 공간 상대 경로입니다. PIPELINECTL_USE_PATH_AS_KEY 기능 플래그를 사용하는 경우 키는 save_result 에서 제공된 파일 경로의 경로입니다. 정확한 키 목록을 가져오려면 list_results를 사용하십시오.

예:

load_result test mocha_results.json
#
# Using the `PIPELINECTL_USE_PATH_AS_KEY` environment variable
PIPELINECTL_USE_PATH_AS_KEY=1 load_result test ../data/coverage.xml

list_results와 함께 사용됨

#
# iterate over all results stored for "test"
# and write them to the filename they were registered with
#
while read -r filename; do
  load_result test "$filename" > "./$filename"
done < <(list_results test)

save_artifact

# <key>: Key of the artifact e.g. app-image, baseimage etc.
# <prop>: Type of property e.g. name, type, tags, signature
# <value>: Value of the property
save_artifact <key> [<prop>=<value> ...]

파이프라인을 사용하여 새 빌드 아티팩트를 등록하거나 기존 아티팩트를 업데이트합니다.

컨테이너 이미지

사용할 수 있는 일부 제안된 특성은 다음과 같습니다.

  • type: image 를 포함하여 모든 아티팩트 유형이 될 수 있습니다.
  • name: 아티팩트의 완전한 이름입니다. 예를 들어, 이미지의 경우 docker pull 에서 사용할 수 있는 것입니다.
  • signature: 올바른 서명입니다.
  • digest: sha256 다이제스트입니다.
  • source: 예를 들어, http://<some-git-url>/blob/<commithash>/<path-to-file> 입니다.

이러한 특성의 맨 위에 모든 특성을 설정할 수 있습니다.

이미지의 경우 name 특성에는 이미지에 대한 태그도 포함되어야 합니다.

예:

save_artifact ui_service "name=us.icr.io/team_namespace/ui_service:2.4.3"
save_artifact ui_service "type=image"
# any additional property can be added
save_artifact ui_service "tags=latest,2.4.3,feat-something"
# later, when the image was signed, and we have signature data
save_artifact ui_service "signature=${SIGNATURE}"

stdin을 값 소스로 사용

다음과 같은 경우 stdin에서 값을 제공할 수 있습니다.

  • 명령에 대한 컨텐츠가 스트림됩니다.
  • 하나의 특성에 값이 없으며 =

예:

command_with_large_output | save_artifact ui_service "issues"
# this also works with multiple properties,
# but stdin can provide value for only a single one
command_with_large_output | save_artifact ui_service "issues" "result=success" "signature=${SIGNATURE}"

= 에서 다중 값이 누락된 경우, 명령은 오류와 함께 종료됩니다. stdin의 값에 속하는 특성을 판별할 수 없기 때문입니다.

값이 없지만 여전히 = 를 추가하는 특성에는 값으로 빈 문자열이 있습니다.

save_artifact ui_service "bar="
load_artifact ui_service bar # returns an empty string

list_artifacts

list_artifacts

저장된 아티팩트의 <key>stdout 에 나열합니다.

예:

list_artifacts
# returns the list of stored artifact keys to stdout for example:
#
# ui_service
# app_service

load_artifact

# <key>: Name of the artifact e.g. app-image, baseimage etc.
# <prop>: Type of property e.g. name, type, tags, signature
load_artifact <key> [<prop>]

설명:

  • 값이 지정된 경우, 리포지토리의 지정된 속성 값을 출력합니다.
  • 만 지정된 경우, 해당 저장소의 사용 가능한 모든 속성을 나열합니다.

예제 1: 특정 속성 가져오기:

SIGNATURE=$(load_artifact ui_service signature)

Example2: 주어진 아티팩트의 모든 속성 나열:

load_artifact ui_service

list_repos 과 함께 사용하여 속성 값을 검색합니다.

#
# iterate over all artifacts and print their image names
#
while read -r key; do
  image=$(load_artifact $key name)
  echo "Artifact saved as '$key' is named: '$image'"
done < <(list_artifacts)

콘솔에 다음 행을 출력합니다.

특정 속성을 검색할 때:

 Artifact saved as 'ui_service' is named: 'us.icr.io/team_namespace/ui_service:2.4.3'
 Artifact saved as 'backend_service' is named: 'us.icr.io/team_namespace/backend_service:2.4.3'

주어진 아티팩트의 모든 속성을 나열하는 경우:

 Properties available for 'ui_service': name, type, tags, signature

직렬화

pipelinectl 데이터를 전송 가능한 JSON 파일로 직렬화하여 파이프라인 웹훅 트리거에 대한 페이로드로 사용하십시오. save_repo 에 의해 설정된 저장소, save_artifact 에 의해 설정된 아티팩트 및 set_env 에 의해 설정된 환경 변수를 직렬화할 수 있습니다.

(선택사항) 플래그:

--all-repos         # all the repository information set by `pipelinectl`
--all-artifacts     # all the artifacts information set by `pipelinectl`

예:

다음 코드는 모든 저장소, 모든 아티팩트 및 <env_variable1>, <env_variable2>foo.json 파일에 저장합니다.

pipelinectl serialize --all-repos --all-artifacts <env_variable1> <env_variable2> > foo.json
```이 명령어는 별칭이 아닙니다. `pipelinectl` 명시적으로 필요합니다.
{: note}


### 비연속화 {: #deserialize}

`pipelinectl` 가 트리거된 파이프라인에서 작동할 수 있도록 `pipelinectl` 를 JSON에서 파일로 직렬화 해제하십시오. `pipelinectl serialize` 명령으로 직렬화된 JSON을 인수로 사용하십시오.

예:

```bash {: codeblock}
pipelinectl deserialize ./foo.json
```이 명령어는 별칭이 아니므로, ` `pipelinectl` `을 명시적으로 입력해야 합니다.
{: note}


## 하위 레벨 메소드 {: #low-level-methods}

이러한 메소드는 완전성을 위해서만 노출됩니다. 드문 경우에만 메소드를 사용하십시오.

### put_data {: #put_data}

```bash {: codeblock}
# <key>: Name of the data
# <prop>: Type of property e.g. name, type, tags, signature
# <value>: Value of the property
put_data <key> <prop> <value>

prop로 정의된 항목에서 valuekey로 설정합니다.

get_data

# <key>: Key of data
# <prop>: Type of property e.g. name, type, tags, signature
# <value>: Value of the property
get_data <key>
get_data <key> <prop>

key 로 정의된 항목의 prop 를 출력합니다. prop 가 지정되지 않은 경우, key 에 대한 모든 prop 를 반환합니다. key 에 ‘ prop ’가 없을 경우 0이 아닌 종료 코드를 반환합니다.

자산 저장

# <prop>: Type of property; for example, uri, id, blob
# <value>: Value of the property
save_asset <prop1> <value1> blob <json_string or path to a json file>
save_asset <prop1> <value1> <prop2> <value2> blob <json_string  or path to a json file>

파이프라인 전체에서 액세스할 수 있도록 pipelinectl 스토리지에 자산 정보를 저장합니다. 임의의 수의 특성이 허용됩니다. 하지만,blob 은 필수 전달되는 예약된 속성이며 해당 값은 유효한 json 파일의 파일 경로 또는 유효한 json 문자열이어야 합니다. save_asset 특성은 불변 항목을 작성합니다. 동일한 <prop> <value> 쌍 조합에 대해 두 번 호출할 수 없습니다.

자산 로드

# <prop>: Type of property; for example, uri, id
# <value>: Value of the property
load_asset # retrieves all assets stored by save_asset
load_asset <prop1> <value1> # retrieves one asset that matches prop1 = value1 saved during save_asset
load_asset <prop1> <value1> <prop2> <value2> # retrieves one asset that matches prop1 = value1 AND prop2 = value2 saved during save_asset

제공된 <prop> <value> 쌍과 일치하는 자산을 검색합니다. <prop> <value> 조합 없이 호출되는 경우 json 배열 내부의 파이프라인에서 save_asset 를 사용하여 저장되는 모든 자산을 검색합니다. blob 특성은 예약된 특성이므로 load_asset 에 대해 일치하는 특성으로 사용할 수 없습니다.

증거 저장

# <prop>: Type of property; for example, blob, sha
# <value>: Value of the property
save_evidence <prop1> <value1> blob <json_string  or path to a json file>
save_evidence <prop1> <value1> <prop2> <value2> blob <json_string  or path to a json file>

파이프라인 전체에서 액세스할 수 있도록 증거 정보를 pipelinectl 스토리지에 저장합니다. 임의의 수의 특성이 허용됩니다. 그러나, 그 blob 속성은 반드시 전달해야 하는 예약된 속성이며 해당 값은 유효한 json 파일의 파일 경로 또는 유효한 json 문자열이어야 합니다. save_evidence 특성은 불변 항목을 작성합니다. 동일한 <prop> <value> 쌍 조합에 대해 두 번 호출할 수 없습니다.

로드 증거

# <prop>: Type of property; for example, id, sha
# <value>: Value of the property
load_evidence # retrieves all evidences that are stored by save_evidence
load_evidence <prop1> <value1> # retrieves one evidence that matches prop1 = value1 saved during save_evidence
load_evidence <prop1> <value1> <prop2> <value2> # retrieves one evidence that matches prop1 = value1 AND prop2 = value2 saved during save_evidence

제공된 <prop> <value> 쌍과 일치하는 증거를 검색합니다. <prop> <value> 조합 없이 호출되는 경우 json 배열 내 파이프라인에서 save_evidence 를 사용하여 저장되는 모든 증거를 검색합니다. blob 특성은 예약된 특성이므로 load_evidence 에 대해 일치하는 특성으로 사용할 수 없습니다.

삭제 증거

delete_evidences # deletes all the evidences stored inside pipelinectl so far using save_evidence

이 명령은 save_evidence 를 사용하여 저장된 pipelinectl내에 저장된 모든 증거를 지웁니다.

save_string(더 이상 사용되지 않음)

save_string이 더 이상 사용되지 않습니다. 대신 set_env를 사용하십시오.

save_string <key> <value>

나중에 load_string을 사용하여 검색할 수 있는 임의의 문자열을 저장합니다.

load_string(더 이상 사용되지 않음)

load_string이 더 이상 사용되지 않습니다. 대신 get_env를 사용하십시오.

load_string <key>

key 에 저장된 문자열을 출력합니다.