DevSecOps 문제 해결
DevSecOps 을 사용할 때 발생할 수 있는 문제를 해결하는 데 도움이 되는 팁을 참조하세요.
일반 문제점 해결 방법
-
UI가 느리거나 로그를 로드하는 데 실패하는 경우 페이지를 다시 로드하십시오.
-
상태 페이지 에서 가동 중단 확인
-
파이프라인을 다시 실행하십시오.
수동 프로모션 트리거
IBM 환경 문제
Git 속도 제한으로 인해 파이프라인 실행 속도가 느립니다
파이프라인 실행이 느려 보이고, 파이프라인 실행이 완료되는 데 시간이 오래 걸립니다.
또한 로그의 여러 위치에서 다음과 같은 항목을 찾을 수 있습니다:
Unable to use this tool because the git API rate limit is exceeded. Please try again in <n> minutes.
파이프라인은 내부적으로 Git API 요청( Git 상태 설정, 이슈 생성/업데이트 등)을 사용합니다. Git 요금 제한이 있습니다
이 Git 속도 제한 문제를 극복하기 위해:
- 환경 속성을
batched-evidence-collection에서1으로 변경합니다. IBM Cloud 문서에서 해당 섹션을 참조하세요. - Git 증거 보관함에서 COS 증거 보관함으로 마이그레이션합니다(COS 전용이라고도 함). IBM Cloud 문서에서 해당 섹션을 참조하세요.
- 파이프라인 및/또는 트리거에 다른 Git 토큰을 사용하세요.
컨테이너화된 태스크의 check-registry 단계가 오류와 함께 실패함
IBM Cloud 레지스트리는 초과할 수 있는 너무 많은 이미지를 푸시하여 제한된 할당량을 제공합니다.
- 이미지로 이동하여 필요하지 않은 이미지를 삭제하십시오.
- 파이프라인을 다시 실행하십시오.
다음 명령을 사용하여 할당량 한계 및 사용량을 확인할 수 있습니다.
ibmcloud cr quota
단계에 대한 로그가 표시되지 않음
이는 Tekton 환경의 문제입니다.
페이지를 다시 로드해 보십시오. 다운로드 단추를 사용하여 로그를 다운로드하십시오.
템플리트 및 파이프라인 문제
기본 이미지에 액세스할 수 없으므로 태스크가 취소되었습니다.
artifactory 신임 정보가 올바른지 확인하십시오. 여기서 새 artifactory 토큰을 작성할 수 있습니다. 다음을 실행하여 시크릿을 수동으로 작성할 수 있습니다.
kubectl create secret docker-registry mysecret \
--dry-run \
--docker-server=wcp-compliance-automation-team-docker-local.artifactory.swg-devops.com \
--docker-username=<username> \
--docker-password=<artifactory token> \
--docker-email=<email> \
-o yaml
다음과 유사한 내용을 출력합니다.
apiVersion: v1
data:
.dockerconfigjson: <your secret>
kind: Secret
metadata:
creationTimestamp: null
name: regcred
type: kubernetes.io/dockerconfigjson
파이프라인 특성에서 artifactory-dockerconfigjson 매개변수를 .dockerconfigjson 값으로 업데이트하십시오.
자세한 정보는 시크릿 작성에 대한 kubectl 문서(: 외부) 를 참조하십시오.
파이프라인이 조기에 실패함
파이프라인이 조기에 실패하면 다음 메시지가 표시됩니다.
Pipeline could not run, resource failed to apply - Kind: "Secret", Name: "pipeline-pull-secret" ResourceError
이 경우에는 파이프라인이 부팅되지 않았기 때문에 파이프라인에서 실패가 발생했습니다. 따라서 로그를 사용할 수 없습니다.
이 파이프라인에서 사용되는 IBM Container Registry 에서 Docker 이미지를 가져오는 dockerconfig.json 시크릿이 올바르지 않습니다.
이 시크릿이 올바르지 않거나 이 시크릿과 연관된 API키가 순환되거나 취소되었을 수 있습니다.
새 dockerconfig.json 를 생성한 후 파이프라인에서 이 새 시크릿 값을 파이프라인 매개변수로 사용하거나 Secrets Manager에 저장하십시오.
새 dockerconfig.json 를 생성하려면 다음 명령을 실행합니다:
kubectl create secret docker-registry my-registry-secret \
-o json \
--dry-run=client \
--docker-server=icr.io \
--docker-username=iamapikey \
--docker-email=john-doe@ibm.com \
--docker-password=<apikey> \
| jq -r '.data[".dockerconfigjson"]'
여기서 <apikey> 는 IBM Cloud Cloud API키 또는 서비스 ID API키입니다.
파이프라인이 여러 artifactory 저장소에서 이미지를 가져올 수 없습니다.
파이프라인이 한 저장소에서는 이미지를 가져오지만 다른 저장소에서는 이미지를 가져오지 못했습니다.
단일 저장소에서 이미지를 가져오도록 구성되어 파이프라인이 실패했습니다.
새 artifactory dockerconfigjson 시크릿을 수동으로 작성하여 여러 저장소에 대한 인증을 지원합니다.
Artifactory의 여러 저장소에서 이미지를 가져오기 위한 인증을 지원하려면 새 dockerconfigjson 를 생성하고 하나 이상의 파이프라인에 시크릿 유형 artifactory-dockerconfigjson 환경 특성을 추가하십시오.
다음 스크립트는 두 개의 서로 다른 artifactory 저장소에 대한 인증 세부사항을 제공하는 artifactory dockerconfigjson 를 생성하기 위한 샘플입니다. 이는 사용자 정의할 수 있는 스크립트입니다.
전제조건
kubectl 및 jq 명령을 설치해야 합니다.
단계
-
LF (줄 바꾸기) 문자 모드 행 끝에 파일을 저장하는 텍스트 편집기를 여십시오.
-
파일을 작성하고 다음 스크립트의 컨텐츠를 복사하십시오.
dockerconfig_1=$(kubectl create secret docker-registry my-registry-secret \ --output json \ --dry-run=client \ --docker-server="<artifactory_repo_host>" \ --docker-username="<email>" \ --docker-email="<email>" \ --docker-password="<artifactory_token>" \ | jq -r '.data[".dockerconfigjson"]') dockerconfig_2=$(kubectl create secret docker-registry my-registry-secret \ --output json \ --dry-run=client \ --docker-server="<second_repo_host>" \ --docker-username="<email>" \ --docker-email="<email>" \ --docker-password="<second_artifactory_token>" \ | jq -r '.data[".dockerconfigjson"]') echo $dockerconfig_1 | base64 -d > first_secret.json echo $dockerconfig_2 | base64 -d > second_secret.json new_dockerconfig=$(jq -s '.[0] * .[1]' first_secret.json second_secret.json | base64 -w0) echo ${new_dockerconfig} > final_dockerconfig.txt -
플레이스홀더 값을 실제 인증 세부사항으로 바꾸십시오.
<artifactory_repo_host>를 첫 번째 저장소에 대한 링크로 바꾸십시오.<artifactory_token>를 첫 번째 저장소의 인증 토큰으로 대체하십시오.<email>를 인증과 연관된 이메일로 대체하십시오.<second_repo_host>를 두 번째 저장소에 대한 링크로 바꾸십시오.<second_artifactory_token>를 두 번째 저장소의 인증 토큰으로 대체하십시오.
-
파일을 저장하십시오.
-
파일이 쓰기 권한이 있는 디렉토리에 저장되었는지 확인하십시오.
-
스크립트를 실행하십시오.
-
final_dockerconfig.txt의 컨텐츠를artifactory-dockerconfigjson의 파이프라인 환경 특성에 시크릿으로 추가하십시오. Secrets Manager 또는 Key Protect를 사용 중인 경우 적절한 기술을 사용하여 이 파일의 컨텐츠를 저장하십시오.
하위 모듈 파일이 누락되어 CRA 또는 Docker 빌드에 실패했습니다
CRA 또는 Docker 빌드와 같은 파이프라인 단계가 실패하면 다음과 유사한 오류 메시지가 표시될 수 있습니다:
failed to calculate checksum of ref moby::...: failed to walk /var/lib/docker/tmp/buildkit-mount.../common-dev-assets/module-assets/ci: lstat ... no such file or directory
이 오류는 리포지토리에 Git 하위 모듈이 포함되어 있지만 파이프라인은 기본적으로 하위 모듈을 복제하지 않기 때문에 발생합니다. 각 파이프라인 단계는 자체 컨테이너에서 실행되며 리포지토리를 새로 체크 아웃하므로 명시적으로 초기화하지 않으면 하위 모듈 콘텐츠가 누락됩니다.
이 문제를 해결하려면 Git 서브모듈이 필요한 모든 단계에서 초기화해야 합니다. 특히 CRA의 경우 사용자 지정 CRA 스크립트에 서브모듈 초기화를 추가할 수 있습니다.
예를 들어 다음을 포함하도록 스크립트를 업데이트합니다:
git submodule update --init --recursive
이렇게 하면 CRA 빌드 프로세스가 실행되기 전에 서브모듈을 사용할 수 있습니다.
이미지 서명 문제
이미지 서명 태스크가 실패하면 이미지 서명 문서 를 참조하여 서명 키가 올바르게 생성되고 저장되었는지 확인하십시오.
파이프라인 구성에 정의되지 않은 동적 스캔 단계와 관련된 문제
CI 파이프라인 실행이 오류와 함께 실패합니다.
CI 파이프라인 구성에 동적 스캔을 실행하기 위한 태스크 정의가 포함되지 않은 경우 오류가 발생합니다. .pipeline-config.yaml 에 다음 스니펫을 추가하고 애플리케이션에 맞게 단계를 사용자 정의하십시오.
dynamic-scan:
dind: true
abort_on_failure: false
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
echo "Please insert script to invoke/execute dynamic scan tool like OWASP ZAP on the built and deployed application."
스테이지에 대한 자세한 정보는 사용자 정의 스크립트 를 참조하십시오.
지원 받기
- 스택 오버플로를 검토하여 다른 사용자도 같은 문제가 발생했는지 확인할 수 있습니다. 포럼을 사용하여 질문할 때는 IBM Cloud 개발팀에서 볼 수 있도록 질문에 "ibm-cloud" 및 "DevSecOps" 태그를 지정하세요.
- IBM Cloud IBM 의 AI 어시스턴트( )는 에서 일하는 것과 이용 가능한 카탈로그를 이용해 솔루션을 구축하는 것에 대해 배울 수 있도록 설계되었습니다. watsonx IBM Cloud AI 어시스턴트로부터 도움 받기를 참조하세요.
- 그래도 문제점을 해결할 수 없는 경우 지원 케이스를 열 수 있습니다. 지원 케이스 열기 또는 케이스 심각도 및 응답 시간에 대한 정보는 지원 케이스에 대한 작업 또는 지원 케이스 에스컬레이션을 참조하십시오.