Reutilização de evidências nos fluxos de trabalho de PR e CI
Por padrão, quando um PR ou um pipeline de CI é executado, todas as verificações e testes configurados são sempre executados, mesmo que o conteúdo do repositório ou a imagem que está sendo verificada ou testada não tenha sofrido alterações desde a última verificação ou teste. Como resultado, novas evidências são coletadas a cada execução. Isso desperdiça tempo e recursos.
DevSecOps Os pipelines oferecem um recurso opcional chamado “Reutilização de evidências” para pular a verificação ou o teste nas etapas do pipeline quando o conteúdo do repositório ou a imagem que está sendo verificada ou testada não sofreu alterações desde a última verificação ou teste. Nesse caso, não há varredura nem execuções de teste, portanto, nenhuma nova evidência é coletada. Em vez disso, as evidências coletadas anteriormente para a varredura ou o teste são recuperadas e reutilizadas nos resumos de CI, CD e CC. Isso agiliza os fluxos de trabalho de PR e CI e otimiza o uso de recursos. Quando o recurso está ativado, o pipeline verifica se o que está sendo testado ou analisado não sofreu alterações desde a execução anterior. Se a validação for bem-sucedida, as etapas do pipeline podem pular o teste ou a verificação e basear-se nas evidências e nos resultados coletados anteriormente.
Os casos típicos de reutilização de evidências são:
-
Caso de uso 1:
- Executar testes unitários no pipeline de PR com coleta de evidências.
- Faça a fusão do PR da maneira que preferir (rebase, squash ou fusão normal).
- Se o código-fonte não tiver sofrido alterações entre as execuções do pipeline de PR e de CI, a execução do teste de unidade no pipeline de CI pode ser ignorada. As evidências dos testes unitários da execução do pipeline do PR são obtidas e reutilizadas para o resumo da CI.
-
Caso de uso 2:
- Execute o pipeline de PR com coleta de evidências ou execute o pipeline de CI.
- Uma das etapas do pipeline, por exemplo,
compliance-check, falha devido a um problema intermitente. - Execute novamente o pipeline de PR ou CI com o mesmo commit.
- As varreduras e os testes bem-sucedidos são ignorados na nova execução, e os resultados correspondentes da execução anterior são recuperados e reutilizados.
- Apenas a varredura com falha é executada, e novas evidências são coletadas para ela.
Para habilitar a coleta de evidências no fluxo de trabalho de PR, consulte “Coleta de evidências no fluxo de trabalho de PR ”.
Facilitando a reutilização de evidências
Para habilitar a reutilização de evidências no pipeline de PR ou CI, defina a propriedade de ambiente evidence-reuse como 1``. Por padrão, essa propriedade não está ativada.
| Propriedade | Descrição | Padrão |
|---|---|---|
evidence-reuse |
Defina como “ 1 ” para habilitar a reutilização de evidências. |
Não ativado |
evidence-reuse-for-failure |
Defina como “ 1 ” para reutilizar também as evidências com falha. Defina isso além de evidence-reuse=1. |
Não ativado |
evidence-validity-period |
Número de horas durante as quais as evidências podem ser reutilizadas. | 24 (máximo de 720, o que equivale a 30 dias) |
A ferramenta check-evidence-for-reuse verifica se há evidências para a combinação de asset-key, tool-type e evidence-type, e confirma se as evidências atendem às condições para reutilização.
Para obter mais informações, consulte check-evidence-for-reuse.
Para consultar a referência completa dos comandos da CLI e todos os parâmetros disponíveis, consulte “cocoa locker evidence reuse ”.
Condições para a reutilização de evidências
A ferramenta “ check-evidence-for-reuse ” verifica se as seguintes condições são atendidas:
- As evidências foram coletadas no mesmo recurso de commit, conteúdo do repositório ou recurso de imagem.
- O status da evidência é “
success”. As evidências com qualquer outro status não são consideradas para reutilização, e é executada uma nova digitalização. Isso garante que, quando forem coletados dados de falha devido a uma falha intermitente em uma etapa, uma nova execução do pipeline não reutilize os dados de falha. Em vez disso, é realizada uma nova tomografia e são coletadas novas evidências. No entanto, em alguns casos, as evidências rejeitadas precisam ser reutilizadas. Por exemplo, uma verificação detectou uma vulnerabilidade no pipeline de CI, e a alteração deve ser implantada como uma implantação de emergência. Para reutilizar as evidências com falha, defina a propriedade de ambienteevidence-reuse-for-failure=1, além deevidence-reuse=1``. - As provas não estão desatualizadas. A data de coleta das provas está dentro do prazo de validade. O prazo de validade padrão é de 24 horas. É possível configurar o valor para uma execução do pipeline usando a propriedade de ambiente
evidence-validity-period(em horas). O valor está limitado a um máximo de 720 horas (30 dias). - Opcionalmente, as evidências correspondem a quaisquer verificações de configuração que tenham sido salvas na seção de detalhes, como a versão da ferramenta ou a versão da imagem base da etapa.
Ferramentas e tipos de evidências compatíveis
Os scripts de varredura padrão envolvidos no DevSecOps foram atualizados para permitir a reutilização de evidências quando essa função estiver ativada.
Tipos de evidência para os quais é permitida a reutilização de evidências:
| Tipo de evidência | Pode ser reutilizado |
|---|---|
com.ibm.static_scan |
True |
com.ibm.dynamic_scan |
True |
com.ibm.detect_secrets |
True |
com.ibm.code_bom_check |
True |
com.ibm.code_cis_check |
True |
com.ibm.code_vulnerability_scan |
True |
com.ibm.acceptance_tests |
Sim. Você deve atualizar seu script personalizado. |
com.ibm.unit_tests |
Sim. Você deve atualizar seu script personalizado. |
com.ibm.branch_protection |
Não |
com.ibm.pipeline_run_data |
Não |
com.ibm.peer_review |
Não |
Atualize seus scripts personalizados, como testes unitários e testes de aceitação, para permitir a reutilização de evidências quando essa funcionalidade estiver ativada. Para adotar a reutilização de evidências em seus scripts personalizados, consulte a seção a seguir.
Adoção da reutilização de evidências em scripts
Para implementar a reutilização de evidências em seus scripts, verifique primeiro se há evidências reutilizáveis disponíveis. O pseudocódigo a seguir descreve como verificar se há evidências e decidir qual será o próximo passo.
Pseudocódigo
Check whether evidence for reuse exists for (asset, tool, evidence-type) by using check-evidence-for-reuse
If evidence is found
Skip the scan or test
Save the reused result file (optional)
Else
Continue with your existing scan process and collect new evidence as usual
Verifique se há evidências disponíveis para reutilização
Utilize o comando check-evidence-for-reuse com os mesmos parâmetros que você usa no script collect-evidence . Para mais detalhes, consulte check-evidence-for-reuse.
O comando é encerrado com a mensagem “ 0 ” quando são encontradas e salvas evidências reutilizáveis, e com a mensagem “ 1 ” quando não são encontradas.
Exemplo de uso
evidence_params=(
--tool-type "my-tool"
--evidence-type "com.ibm.unit_tests"
--asset-type "repo"
--asset-key "${repo_key}"
)
reused_evidence_json="$(mktemp)"
if check-evidence-for-reuse "${evidence_params[@]}" --output-path "${reused_evidence_json}"; then
echo "Reusable evidence found. Skipping the test."
else
# No reusable evidence: run the test and collect new evidence as usual
run_my_tests
collect-evidence "${evidence_params[@]}" --status "success"
fi