DevSecOps에 고유 앱 제공
DevSecOps 의 도구 체인을 활용하여 지속적 통합 및 지속적 배포를 위한 자체 애플리케이션을 통합하는 방법은 다양합니다.
샘플 사용
원활한 지속적인 통합과 배포를 위해 자체 애플리케이션을 DevSecOps 툴체인으로 통합하려면 샘플 설정을 시작하십시오.
Node.js 예시
제공되는 기본 샘플 앱을 사용하여 DevSecOps 도구 체인을 작성하십시오. hello-compliance-app 는 정적 웹 페이지를 제공하는 Node.js 서버를 호스팅합니다.
다른 샘플
또는 다음 샘플 중 하나를 사용하여 시작할 수 있습니다
- 코드 엔진 준수 앱: 이 저장소에는 Code Engine 빌드 전략을 설명하는 Node.js 애플리케이션이 포함되어 있으며, Code Engine 애플리케이션 또는 Code Engine 작업으로 배포할 수 있습니다.
- Go-compliance-app: 이 저장소에는 Gin을 사용하는 Go 마이크로서비스가 포함되어 있으며,
helm를 사용하여 배포됩니다. - Python-compliance-app: 이 저장소에는 Flask를 사용하는 Python 마이크로서비스가 포함되어 있으며,
helm를 사용하여 배포됩니다. - Node-cloudant-compliance-app: 이 저장소에는
kubectl를 사용하여 배포된 Node.js 애플리케이션이 포함되어 있으며, 이는 Infrastructure-As-Code(Terraform)를 통해 생성된 Cloudant 인스턴스와 상호 작용합니다.
추론된 DevSecOps 구성을 사용하십시오
DevSecOps 의 CI 툴체인에 자신만의 애플리케이션 소스 코드 저장소를 추가한 후에는 추론된 DevSecOps 파이프라인 구성 기능을 사용하여 즉시 시작할 수 있습니다. 이 기능:
- 초기 사용자 정의가 필요하지 않습니다.
.pipeline-config.yamlDevSecOps 파이프라인 구성 파일의 내용을 추론합니다.- 코드를 구축, 테스트, 배포하는 데 필요한 스크립트를 식별합니다.
- 이 스크립트에 대한 코드를 제공합니다.
이 기능을 사용하면 마이크로 서비스나 애플리케이션을 DevSecOps 파이프라인에 쉽고 빠르게 온보딩하고, DevSecOps 채택을 간소화할 수 있습니다.
지정된 소스 코드 리포지토리에 대한 CI 파이프라인 구성 yaml 파일 생성(독립 실행형 모드에서 DevSecOps 구성 추론)
정적 방식/독립형 모드로 지정된 소스 코드 리포지토리에 대한 파이프라인 구성 파일을 생성할 수 있습니다. 이 기능은 추론된 DevSecOps 구성과 동일한 로직에 의존하며 DevSecOps 규정 준수 기본 이미지의 특정 스크립트를 통해 제공됩니다.
전제조건
- 로컬 환경에서 도커 엔진 가동 및 실행하기
- yq를 사용하여 다음 명령을 실행합니다
사용량
스크립트는 규정 준수 기본 이미지의 다음 경로에 있습니다: /opt/one-pipeline/polyglot/tools/enable-devsecops.sh.
스크립트 사용법은 다음과 같습니다 enable-devsecops.sh [--configuration <key>=value]* [--configuration-file <filename>] [--version <v9|v10|v11>]* <path to source code directory>
다음 스니펫은 이 스크립트를 사용하는 방법을 설명합니다.
# clone the source code repository that you want to generate CI pipeline config for
git clone https://us-south.git.cloud.ibm.com/open-toolchain/hello-containers
cd hello-containers
export compliance_base_image=$(curl -L https://us-south.git.cloud.ibm.com/open-toolchain/compliance-pipelines/-/raw/open-v10/definitions/ci-trigger.yaml?ref_type=heads | yq '.spec.params[] | select(.name == "compliance-baseimage") | .default')
# environment variable compliance_base_image should contains a value like icr.io/continuous-delivery/toolchains/devsecops/devsecops-baseimage:3.109.7_commons-1.50.2 or upper
# define hint for unit-test and acceptance-test configuration properties as the hello-containers
# sample has specific npm script entries for it
docker run --platform linux/amd64 -v.:/src --rm -it $compliance_base_image /opt/one-pipeline/polyglot/tools/enable-devsecops.sh --configuration hint-npm-unit-testing-script=test-unit --configuration hint-npm-acceptance-testing-script=test-fvt /src
--configuration 옵션(또는 키 값 쌍이 있는 파일과 함께 --configuration-file <file path> )을 사용하여 특정 매개변수를 제공할 수 있습니다.
제공된 매개 변수는 DevSecOps 추출 프로세스를 구성하며 사용 가능한 매개 변수는 여기에 설명되어 있습니다: 추출 지점 구성
docker run --platform linux/amd64 -v.:/src --rm -it $compliance_base_image /opt/one-pipeline/polyglot/tools/enable-devsecops.sh --configuration hint-npm-unit-testing-script=test-unit --configuration hint-npm-acceptance-testing-script=test-fvt /src
결과
polyglot-spots.json 및 .pipeline-config.yaml 파일이 소스 코드 저장소의 루트 디렉터리에 추가됩니다.
polyglot-spots.json는 소스 코드 검사에서 발견된 특정 지점의 지도이며 버릴 수 있습니다..pipeline-config.yamlcI 파이프라인에서 사용할
이제 애플리케이션 온보딩에 설명된 대로 .pipeline-config.yaml 을 소스 코드 git 리포지토리로 푸시하고 애플리케이션 리포지토리로 사용할 수 있습니다.
스테이지 매개변수 추가
각 샘플 앱의 소스 코드에는 .pipeline-config.yaml 파일이 포함되어 있습니다. .pipeline-config.yaml 파일은 파이프라인 실행 프로세스의 모든 단계에서 지속적 통합 및 지속적 배포 툴체인이 사용하는 핵심 구성 파일입니다.
각 스테이지에 필요한 다음 특성이 포함된 .pipeline-config.yaml 구성 파일을 추가하십시오.
image- 스테이지를 실행하는 데 사용되는
Docker이미지 이름. 예를 들어, 다음 코드를 사용하여 이미지에 서명하십시오.
image: icr.io/continuous-delivery/pipeline/image-signing:1.0. 0@sha256:e9d8e354668ba3d40be2aaee08298d2aa7f0e1c8a1829cca4094ec93830e3e6a
abort_on_failure-
스테이지에서 오류가 발생하면 파이프라인 실행을 중지하려면 이 속성을
true로 설정하십시오. 이 특성이false로 설정되면 단계가 경고 상태 (황색 상태라고도 함) 로 전달됨으로 표시되고 파이프라인이 계속 실행됩니다. script-
해당 단계에서 필요한 작업을 수행하는 스크립트. 앱 저장소 내의 스크립트 디렉터리에 스크립트를 생성하고, 이 위치에서 스크립트를 호출하십시오. 예를 들어, 다음 코드 스니펫은 이미지에 서명할 때
script섹션의 컨텐츠를 표시합니다.script: | #!/usr/bin/env bash STAGE_DIND="true" STAGE_ABORT_ON_FAILURE="false" STAGE_IMAGE_PULL_POLICY="IfNotPresent" source scripts/sign_image.sh dind-
실행 중인 파이프라인에서
docker기능을 사용하려면 이 속성을true로 설정하십시오. 필요한 매개변수를 결정한 후에는 파이프라인의 여러 단계를 정의할 수 있습니다. setup-
이 단계를 정의하여 사전 설정 스크립트를 실행하십시오.
setup: image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2. 12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4 script: | #!/usr/bin/env bash echo "Please insert any required pre-build tasks in this stage." test-
이 단계를 정의하여 앱의 테스트 케이스를 실행하십시오.
test: abort_on_failure: false image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2. 12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4 script: | #!/usr/bin/env bash cd ../"$(load_repo app-repo path)" #npm ci #npm test source test/test.sh static-scan-
코드에서 정적 스캔을 실행하려면 이 단계를 정의하십시오.
static-scan: dind: true 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 static scan tool like SonarQube on the application source code." containerize-
이 단계를 정의하여 앱을 빌드하고 컨테이너화하세요.
containerize: dind: true image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2. 12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4 script: | #!/usr/bin/env bash if [[ "$PIPELINE_DEBUG" == 1 ]]; then trap env EXIT env set -x fi source scripts/build_setup.sh source scripts/build.sh deploy-
이 단계를 정의하여 앱을 대상 환경에 배포하십시오.
deploy: image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2. 12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4 script: | #!/usr/bin/env bash if [[ "$PIPELINE_DEBUG" == 1 ]]; then trap env EXIT env set -x fi source scripts/deploy_setup.sh source scripts/deploy.sh sign-artifact-
기본적으로 DevSecOps CI 툴체인은 컨테이너화 단계에서 빌드되는 모든 이미지에 서명합니다. 도구 체인 설정 중에 제공되는 GPG키는 이미지에 서명 하는 데 사용됩니다. 이미지 서명 프로세스를 사용자 정의하려면
.pipeline-config.yaml에 다음 단계 정의를 추가하십시오.sign-artifact: abort_on_failure: false image: icr.io/continuous-delivery/pipeline/image-signing:1.0. 0@sha256:e9d8e354668ba3d40be2aaee08298d2aa7f0e1c8a1829cca4094ec93830e3e6a script: | #!/usr/bin/env bash STAGE_DIND="true" STAGE_ABORT_ON_FAILURE="false" STAGE_IMAGE_PULL_POLICY="IfNotPresent" source scripts/sign_image.sh acceptance-test-
이 단계를 정의하여 배포 후 수용 테스트를 실행하십시오.
acceptance-test: abort_on_failure: false image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2. 12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4 script: | #!/usr/bin/env bash export APP_URL=$(cat ../app-url) source scripts/setup_go.sh echo "APP_URL :- ${APP_URL}" go run acceptance-test/acceptance-test.test.go release-
이 단계를 정의하여 이전 단계에서 생성된 증거 자료와 관련 자료를 업로드하십시오.
release: abort_on_failure: false image: icr.io/continuous-delivery/toolchains/devsecops/compliance-baseimage:2.26. 1@sha256:a780174a64474187b01b5e40a1721d8307f02897ac6f3eba2d482d4f4926edf1 script: | #!/usr/bin/env bash source scripts/release.sh scan-artifact-
생성된 아티팩트에서 취약성에 대한 스캔을 실행하려면 이 단계를 정의하십시오.
scan-artifact: abort_on_failure: false image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2. 6@sha256:7f588468622a981f89cf5e1212aaf75fface9da6169b5345ca52ab63d8215907 script: | #!/usr/bin/env bash source scripts/va_scan.sh dynamic-scan-
배치된 애플리케이션에서 동적 스캔을 실행하려면 이 단계를 정의하십시오.
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."스테이지에 대한 자세한 정보는 사용자 정의 스크립트 를 참조하십시오.