Customizando pipelines usando scripts customizados
Scripts customizados são customizações incluídas no pipeline. Adotantes, equipes e usuários fornecem scripts para executar tarefas customizadas para assegurar a integração contínua e a implementação contínua de estratégias.
Os estágios de um pipeline são controlados por scripts customizados. Você pode usar um arquivo de configuração (.pipeline-config.yaml) para definir o comportamento das etapas, o conteúdo dos scripts e a imagem base que executa os
scripts. Os scripts e a configuração dos estágios do pipeline são carregados a partir de um repositório Git (repo) que pode ser o repositório do aplicativo (app) (semelhante a .travis.yml ou Jenkinsfile) ou um repositório
customizado.
Quando qualquer um dos scripts personalizados é iniciado, o endereço URL completo do arquivo de script personalizado, incluindo o nome do arquivo e o hash de confirmação, é impresso no início dos registros do pipeline da seguinte forma: The custom script can be viewed using the following link: 'https://<source repo url>/<organization name>/<repository name>/blob/<commit hash>/.pipeline-config.yaml'.
Esse posicionamento melhora a rastreabilidade..
Para obter mais informações, consulte Personalização de pipelines DevSecOps para iniciantes.
Configuração em .pipeline-config.yaml
Use um arquivo de configuração do tipo “ .pipeline-config.yaml ” para ampliar o comportamento do pipeline.
Localização do arquivo
Para pull requests e pipelines de integração contínua, armazene o arquivo de configuração .pipeline-config.yaml em um repositório de aplicativo, da mesma forma que os arquivos .travis.yml`` ou Jenkinsfile .
Para pipelines de implantação contínua, armazene este arquivo em um repositório dedicado.
Para todos os pipelines, é possível customizar o local e a origem do arquivo .pipeline-config.yaml, usando os seguintes parâmetros da IU do pipeline:
pipeline-configpara definir o caminho do arquivo de configuração. O valor padrão é.pipeline-config.yaml.pipeline-config-repopara definir o repositório do qual a configuração e os scripts serão baixados. O valor padrão é o repositório do aplicativo de integração contínua.pipeline-config-branchpara ser usado como o branch da configuração no repositório de configuração. O valor padrão é o branch do repositório do aplicativo na integração contínua e o branchmasterna implantação contínua.
Parâmetros de configuração
A configuração no arquivo .pipeline-config.yaml suporta os seguintes parâmetros:
Essas configurações não são parâmetros de pipeline, elas devem fazer parte do arquivo .pipeline-config.yaml.
-
image: é possível usar como imagem de base para a tarefa qualquer imagem do Docker que seja acessível para o trabalhador do pipeline. -
script: o script a ser executado no estágio. Como esse campo é utilizado como um arquivo de script, certifique-se de que o conteúdo funcione como um arquivo de script na imagem base que você forneceu. Outros scripts podem ser incluídos próximos a este arquivo de configuração e podem ser referenciados a partir deste ponto de entrada. Por exemplo:
test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
scripts/lint.sh
scripts/unit-test.sh
-
dind: especifique sedocker-in-dockerserá ativado para o contexto de script. A configuração padrão éfalse. -
abort_on_failure: por padrão, o pipeline é interrompido em caso de falha no script. Configurar isso comofalsemarca o estágio em um aviso (estado âmbar) (ele passou com aviso), permite que o pipeline continue e a tarefa com falha é referenciada na evidência... -
image_pull_policy: Defina a configuração “ImagePullPolicy” do pod, conforme indicado na imagem, para a imagem base. Os valores possíveis são os mesmos valores válidos para o Kubernetes:AlwaysouIfNotPresent. O valor padrão éIfNotPresent. -
configmap: obter pares de valores de chave a partir de um configmap fornecido que pode ser acessado porPipelineRun. Os valores a seguir são suportados.config-name: a sintaxe direta do nome do configmap. O executor do estágio tenta acessar e montar o mapa de configuração chamadoconfig-name.$prop-name: a sintaxe indireta do nome do configmap. A consulta do nome do configmap é feita a partir do configmap environment-properties, que contém cada valor de ambiente configurado na IU do pipeline. Por exemplo, se houver uma entrada “propmy-config” nas propriedades do ambiente, então “my-config” será usado para “$prop”.
-
secret: obter pares de valores de chave a partir de um configmap fornecido que pode ser acessado porPipelineRun. Os valores a seguir são suportados.-
secret-name: a sintaxe direta do nome do segredo. O executor do estágio tenta acessar e montar o segredo chamadosecret-name. -
$prop-name: a sintaxe indireta do nome do segredo. O nome “Secret” está localizado no configmap “environment-properties”, que contém todos os valores de ambiente definidos na interface do usuário do pipeline. Por exemplo, se o configmap environment-properties contiver a propriedademy-secret,my-secretserá usado para$prop.
-
-
runAfter: execute o estágio atual após o estágio especificado nesta propriedade ser concluído.. Configure o valor com o nome do estágio usado em.pipeline-config.yaml. Use essa propriedade com moderação e confirme se o estágio especificado por essa propriedade existe no pipeline.. Se o estágio não existir, o pipeline poderá entrar em um conflito -
skip: se configurado comotrue, ignore o estágio atual, se possível, em pipelines v10. Nem todos os estágios podem ser contornadas. A tabela a seguir lista os estágios que podem ser ignorados durante a execução do pipeline
| Pipeline | Estágios |
|---|---|
| Pipeline de PR | code-unit-tests, code-compliance-tests e code-pr-finish |
| Pipeline de CI | code-unit-tests, code-static-scan, code-compliance-checks, build-scan-artifact, code-dynamic-scan, deploy-acceptance-tests, deploy-release e code-ci-finish |
| pipeline de CD | prod-verify-artifact, prod-acceptance-tests e prod-finish |
| Pipeline CC | cc-static-scan, cc-dynamic-scan, cc-compliance-checks, cc-scan-artifact e cc-finish |
| App-pipeline de PR de visualização | code-unit-tests, code-static-scan, code-compliance-checks, build-scan-artifact, deploy-acceptance-tests e app-preview-pr-finish |
| Pipeline de IC do modo de desenvolvimento | code-unit-tests, code-static-scan, deploy-release e code-ci-finish |
| Pipeline de CD de modo de desenvolvimento.. | prod-acceptance-tests e prod-finish |
Configuração de exemplo
version: '1' # fixed, this value is used to track schema changes
# `setup` runs right after the app repo is cloned
setup:
# the pipeline will break in case setup fails (default is true)
abort_on_failure: true
# any docker image can be used which is accessible by the private worker
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
# you can reference configmaps, each key in the configmap is going to be available as `/config/{key}`
configmap: my-config
# `$prop` is the indirect config map syntax, the concrete configmap is looked
# up from the `environment-properties` configmap
#
# Eg. if there's a `prop: my-config` entry in the environment properties,
# then `my-config` is going to be used for `$prop`
configmap: $prop
# the mechanism described works for secrets as well!
secret: $my-secrets
# the script is executed inside the checked out app repo
script: |
#!/bin/sh
...
# `test` runs after `setup`, but before building the docker image
test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
...
# `static-scan` runs after `test`, but before building the docker image
static-scan:
image: ibmcom/pipeline-base-image:2.12
script: |
#!/bin/sh
...
# `deploy` runs after building the docker image
deploy:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
# the script has access to the built docker image, which is available at `/config/image`
script: |
#!/bin/sh
cat /config/image
# `dynamic-scan` runs after `deploy`, but before the acceptance test run
dynamic-scan:
image: ibmcom/pipeline-base-image:2.12
script: |
#!/bin/sh
...
# `acceptance-test` runs after `deploy`
acceptance-test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
...