Trazendo seu próprio aplicativo para DevSecOps
Existem várias maneiras de trazer seu próprio aplicativo para uma cadeia de ferramentas de integração contínua e implantação contínua ( DevSecOps ).
Usar amostras
Para integrar seu próprio aplicativo em uma cadeia de ferramentas DevSecOps para integração e implantação contínuas e perfeitas, comece com nossas configurações de amostra.
Node.js exemplo
Crie sua cadeia de ferramentas DevSecOps usando o aplicativo de amostra padrão fornecido. O hello-compliance-app hospeda um servidor Node.js que fornece uma página da web estática
Outras amostras
Como alternativa, você pode começar usando uma dessas amostras:
- Code-engine-compliance-app: esse repositório contém um aplicativo Node.js que ilustra as estratégias de criação do Code Engine e pode ser implantado como um aplicativo Code Engine ou um trabalho Code Engine.
- Go-compliance-app: esse repositório contém um microsserviço Go usando o Gin, implantado usando
helm. - Python-compliance-app: este repositório contém um microsserviço Python usando o Flask, implantado usando
helm. - Node-cloudant-compliance-app: esse repositório contém um aplicativo Node.js implantado usando
kubectl, que interage com uma instância Cloudant criada por meio do Terraform (Infrastructure-As-Code).
Use a configuração inferida do DevSecOps
Depois de adicionar seu próprio repositório de código-fonte de aplicativo à cadeia de ferramentas de CI do DevSecOps, você poderá usar o recurso Inferred DevSecOps Pipeline Configuration para começar imediatamente. Esse recurso:
- Não requer nenhuma personalização inicial.
- Infere o conteúdo do arquivo de configuração do pipeline
.pipeline-config.yamlDevSecOps. - Identifica os scripts necessários para criar, testar e implantar o código.
- Fornece o código para esses scripts.
Use esse recurso para integrar de forma fácil e rápida seus microsserviços ou aplicativos aos pipelines do DevSecOps e simplificar a adoção do DevSecOps.
Gerar o arquivo yaml de configuração do pipeline de CI para um determinado repositório de código-fonte (configuração inferida do DevSecOps no modo autônomo)
Você pode gerar um arquivo de configuração de pipeline para um determinado repositório de código-fonte de forma estática/modo autônomo. Esse recurso se baseia na mesma lógica da configuração inferida do DevSecOps e é fornecido por meio de um script específico na imagem base de conformidade do DevSecOps.
Pré-requisitos
- Tenha um mecanismo de docker instalado e em execução em seu ambiente local
- yq para executar os seguintes comandos
Uso
O script está localizado no seguinte caminho na imagem base de conformidade: /opt/one-pipeline/polyglot/tools/enable-devsecops.sh.
O uso do script é enable-devsecops.sh [--configuration <key>=value]* [--configuration-file <filename>] [--version <v9|v10|v11>]* <path to source code directory>
Os snippets a seguir ilustram como usar esse script.
# 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
Você pode fornecer parâmetros específicos usando as opções do site --configuration (ou --configuration-file <file path> com o arquivo com o par de valores-chave).
Os parâmetros fornecidos configurarão o processo de extração do DevSecOps e os parâmetros disponíveis são descritos aqui: configuração do ponto de extração
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
Resultados
polyglot-spots.json e os arquivos .pipeline-config.yaml são adicionados ao diretório raiz do repositório de código-fonte.
polyglot-spots.jsoné a cartografia de pontos específicos encontrados na inspeção do código-fonte e pode ser descartada..pipeline-config.yamlque será usado pelo pipeline de CI
Agora, você pode enviar o .pipeline-config.yaml para o repositório git do código-fonte e usá-lo como repositório do aplicativo, conforme descrito em Integração de um aplicativo.
Incluindo parâmetros de estágio
O código-fonte de cada aplicativo de exemplo contém um arquivo .pipeline-config.yaml . O arquivo .pipeline-config.yaml é o arquivo de configuração principal utilizado pelas cadeias de ferramentas
de integração contínua e implantação contínua em todas as etapas do processo de execução do pipeline.
Inclua um arquivo de configuração .pipeline-config.yaml que contém as propriedades a seguir, necessárias para cada estágio:
image- O nome da imagem do
Dockerusado para executar o estágio. Por exemplo, use o código a seguir para assinar as imagens:
image: icr.io/continuous-delivery/pipeline/image-signing:1.0. 0@sha256:e9d8e354668ba3d40be2aaee08298d2aa7f0e1c8a1829cca4094ec93830e3e6a
abort_on_failure-
Defina esta propriedade como “
true” para interromper a execução do pipeline caso a etapa falhe. Se essa propriedade for configurada comofalse, a etapa será marcada como passada com um estado de aviso, também conhecido como um estado âmbar, e o pipeline continuará a ser executado script-
O script que executa as ações necessárias nessa etapa. Crie os scripts no diretório de scripts dentro do repositório do aplicativo e execute-os a partir desse local. Por exemplo, o fragmento de código a seguir mostra o conteúdo da seção
scriptquando se deseja assinar as imagens:script: | #!/usr/bin/env bash STAGE_DIND="true" STAGE_ABORT_ON_FAILURE="false" STAGE_IMAGE_PULL_POLICY="IfNotPresent" source scripts/sign_image.sh dind-
Defina esta propriedade como “
true” se desejar habilitar as funções do “docker” no pipeline em execução. Depois de determinar quais parâmetros são necessários, você pode definir várias etapas no pipeline. setup-
Defina esta etapa para executar os scripts de pré-configuração.
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-
Defina esta etapa para executar os casos de teste do aplicativo.
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-
Defina esse estágio para executar uma varredura estática sobre o código
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-
Defina esta etapa para compilar e contêinerizar seu aplicativo.
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-
Defina esta etapa para implantar seu aplicativo no ambiente de destino.
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-
Por padrão, a cadeia de ferramentas de CI DevSecOps assina todas as imagens criadas durante o estágio de conteinerização. As chaves GPG fornecidas durante a configuração da cadeia de ferramentas são usadas para assinar as imagens. Se desejar customizar o processo de assinatura de imagens, inclua a definição de estágio a seguir em seu
.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-
Defina esta etapa para executar seu teste de aceitação após a implantação.
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-
Defina esta etapa para enviar as evidências e os artefatos gerados nas etapas anteriores.
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-
Defina esse estágio para executar uma varredura para vulnerabilidades nos artefatos gerados.
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-
Defina esse estágio para executar varredura dinâmica no aplicativo implementado.
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."Para obter mais informações sobre os estágios, consulte scripts customizados.