Especificação de Build
A especificação de build contém as etapas e definições de build que o pipeline de build usa para executar um build.
A especificação de build é criada em YAML. Por padrão, a especificação de build é localizada na raiz do diretório de origem do build principal e é usada quando você executa um pipeline de build. O arquivo é nomeado como build_spec.yml ou build_spec.yaml. Se a especificação de build não estiver presente no diretório raiz, forneça um caminho relativo do arquivo ao adicionar o estágio de Build Gerenciado.
A especificação de build é organizada nas seguintes seções:
- Configuração do executor do build.
- Configuração das variáveis de ambiente.
- Artefatos de entrada.
- Etapas a serem executadas em sequência.
- Artefatos de saída.
Sintaxe de Especificação de Build
version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash
failImmediatelyOnError: true
env:
variables:
key: "value"
key: "value"
vaultVariables:
key: "secret-id"
exportedVariables:
- variable
- variable
- variable
inputArtifacts:
- name: artifact-name
type: GENERIC_ARTIFACT
artifactId: "artifact-ocid"
registryId: OCID of the Artifact Registry
path: path of the artifact in the Registry
version: version of the artifact
location: target-location
- name: artifact-name
type: STAGE_ARTIFACT
location: target-location
- name: artifact-name
type: URL
url: downloadable link
location: target-location
steps:
- type: Command
name: step-name
shell: shellType
timeoutInSeconds: 650
failImmediatelyOnError: true
command: command
onFailure:
- type: Command
command: |
command
command
timeoutInSeconds: 400
- type: Command
name: step-name
command: |
command
command
command
onFailure:
- type: Command
command: |
command
timeoutInSeconds: 400
outputArtifacts:
- name: artifact-name
type: artifact-type
location: source-location
sudo
não está disponível no host do executor de build. Se você precisar de permissões de superusuário, execute sua etapa de build como usuário raiz.Parâmetros de Especificação de Build
Veja a seguir os parâmetros de especificação de build e seus detalhes:
Parâmetro | Descrição |
---|---|
version |
Obrigatório. Indica a versão da especificação de build. Uma versão ausente ou inválida causa falha no estágio de Build. O valor suportado é |
component |
Obrigatório. Indica um componente específico no DevOps. Um valor ausente ou inválido causa falha no build. O valor suportado é |
timeoutInSeconds |
Opcional. Especifica o timeout para todo o arquivo de especificação de build. Cada 'etapa' também pode ter seu próprio valor de timeout. Se um valor não for especificado, o valor padrão de 8 horas será usado. O valor máximo permitido é 8 horas. |
shell |
Opcional. Especifica o shell a ser usado no nível global da especificação de build. O valor pode ser substituído no nível da 'etapa'. Os valores permitidos são |
failImmediatelyOnError
|
Opcional. Especifica se o build deve continuar se qualquer comando na etapa falhar com um valor de saída diferente de zero. Se não for especificado, o valor padrão será false e a etapa continuará. Os valores permitidos são true e false . O OCI recomenda definir o valor desse atributo como true . |
env |
Opcional. Você pode definir variáveis personalizadas. Há suporte para três tipos de variáveis:
|
inputArtifacts |
Opcional. Usado para definir uma lista de artefatos de entrada que são necessários para executar o estágio de Build atual. Oferece suporte aos seguintes tipos de artefatos de entrada:
Os parâmetros são os seguintes:
Observação: Para o tipo |
steps |
Obrigatório. Esta seção define uma lista de etapas que precisam ser executadas.
|
outputArtifacts |
Opcional. Especifica os artefatos produzidos pelo estágio de Build. Os artefatos produzidos como saída nesta seção são salvos durante a execução do build atual. Eles podem ser usados nos estágios subsequentes no pipeline de build.
|
Tipos de Etapa
Comando
Nome do atributo | Descrição |
---|---|
command |
Há suporte para comandos de linha única e de várias linhas. Todos os comandos especificados em uma etapa são executados na mesma sessão de shell. Com base no valor steps/*/shell , os comandos podem ser shell ou bash. A falha rápida não está ativada. Para que a etapa seja bem-sucedida, a saída do último comando em uma etapa é considerada. Se o último código de saída do comando for 0, a etapa será considerada como bem-sucedida. |
timeoutInSeconds (Opcional) |
Especifica o timeout da etapa. Se não for informado, o valor será herdado do parâmetro timeoutInSeconds global. O valor máximo permitido é 8 horas. |
shell (Opcional) |
Especifica o tipo de shell da etapa atual. Se não for especificado, o valor será herdado do parâmetro shell global. Os valores permitidos são /bin/sh e shell . |
onFailure (Opcional) |
Uma lista de etapas que devem ser executadas em caso de falha na saída normal do estágio de build. Execute se a etapa correspondente falhar e, após a execução, a especificação de build for encerrada. O tratamento da falha não afeta o status do estágio do build. Se qualquer uma das etapas falhar, o status do estágio de build permanecerá |
failImmediatelyOnError (Opcional) |
Especifica se o build deve continuar se qualquer comando na etapa falhar com um valor de saída diferente de zero. Se não for especificado, o valor padrão será false e a etapa continuará. Os valores permitidos são true e false . O OCI recomenda definir o valor desse atributo como true . O valor do atributo |
Auditoria de Vulnerabilidade
Uma auditoria de vulnerabilidade descreve as vulnerabilidades do aplicativo e suas dependências. Quando você executa um build usando o serviço DevOps do OCI, pode iniciar uma verificação de código para obter um novo commit no repositório de código. A auditoria de vulnerabilidade acontece no estágio de Build Gerenciado.
No arquivo de especificação de build, uma etapa de auditoria de vulnerabilidade do tipo VulnerabilityAudit
é adicionada, que o pipeline de build do DevOps usa durante a execução de build para verificação de código. Os atributos desta etapa são listados da seguinte forma:
Nome do atributo | Descrição | Suporte de valor parametrizado |
---|---|---|
name (Opcional) |
Nome da etapa. | N/D |
vulnerabilityAuditName (Opcional) |
Nome do recurso de auditoria de vulnerabilidade. | Sim |
vulnerabilityAuditCompartmentId (Opcional)O padrão é |
OCID do compartimento no qual o recurso de auditoria precisa ser criado. | Sim |
knowledgeBaseId (Obrigatório) |
OCID do placeholder/tag para manter detalhes do recurso de auditoria de vulnerabilidade. Recurso principal do recurso de auditoria de vulnerabilidade. | Sim |
configuration/buildType (Obrigatório) |
Tipo de ferramenta de build. | N/D |
configuration/pomFilePath (Obrigatório) |
Localização do arquivo pom.xml. | Sim |
configuration/packagesToIgnore (Opcional) |
Lista de pacotes Java a serem ignorados ao calcular o resultado da verificação ao fazer a auditoria de vulnerabilidade. | N/D |
configuration/maxPermissibleCvssV2Score (Opcional)O padrão é 0.0 |
Pontuação máxima no CVSS v2, permitida para auditoria de vulnerabilidade. Tudo o que estiver acima dessa configuração deverá marcar o build como Failed . |
N/D |
configuration/maxPermissibleCvssV3Score (Opcional)O padrão é 0.0 |
Pontuação máxima no CVSS v3, permitida para auditoria de vulnerabilidade. Tudo o que estiver acima dessa configuração deverá marcar o build como Failed . |
N/D |
freeFormTags (Opcional) |
Aceita o par chave/valor. | N/D |
Variáveis Predefinidas do Sistema
O DevOps fornece um conjunto de variáveis de sistema predefinidas com valores padrão que você pode usar, como variáveis de ambiente na especificação do build.
Variável | Descrição |
---|---|
OCI_STAGE_ID |
O OCID do estágio atual. |
OCI_PIPELINE_ID |
O OCID do pipeline de build atual. |
OCI_BUILD_RUN_ID |
O OCID da execução do build atual. |
OCI_TRIGGER_COMMIT_HASH |
Hash de confirmação do trigger atual. |
OCI_TRIGGER_SOURCE_BRANCH_NAME |
Ramificação que aciona o build. |
OCI_TRIGGER_SOURCE_URL |
URL do repositório que acionou o build |
OCI_TRIGGER_EVENT_TYPE |
Trigger que iniciou o evento. |
OCI_PRIMARY_SOURCE_DIR |
Diretório de trabalho padrão do build (diretório de trabalho de origem principal). |
OCI_WORKSPACE_DIR |
Valor do diretório de trabalho. Contém /workspace como valor padrão. |
${OCI_WORKSPACE_DIR}/<source-name> |
Caminho do diretório de origem do build.
|
OCI_BUILD_STAGE_NAME |
Nome do estágio de Build. |
OCI_PRIMARY_SOURCE_NAME |
Nome da origem de build principal. |
OCI_PRIMARY_SOURCE_COMMIT_HASH |
Hash de confirmação da origem do build principal usado na execução do build atual. |
OCI_PRIMARY_SOURCE_URL |
URL de origem do build principal. |
OCI_PRIMARY_SOURCE_BRANCH_NAME |
Ramificação de origem do build principal usada na execução do build atual. |
Exemplos de Especificação de Build
Exemplo 1:
version: 0.1
component: build
timeoutInSeconds: 1000
shell: bash
steps:
- type: Command
name: "Build app"
command: |
mvn clean install
Exemplo 2:
version: 0.1
component: build
timeoutInSeconds: 6000
shell: bash
failImmediatelyOnError: true
env:
exportedVariables:
- BuildServiceDemoVersion
steps:
- type: Command
name: "Build Source"
timeoutInSeconds: 4000
failImmediatelyOnError: true
command: |
echo $PATH
mvn clean install
- type: Command
timeoutInSeconds: 400
name: "Dockerizer"
command: |
BuildServiceDemoVersion=`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
echo $BuildServiceDemoVersion
docker build -t build-service-demo
- type: VulnerabilityAudit
name: "Scan my maven repo"
vulnerabilityAuditName: Report-${buildRunId}
vulnerabilityAuditCompartmentId: ocid1.compartment.oc1.iad.restoftheocid
knowledgeBaseId: ocid1.knowledgebase.oc1.iad.restoftheocid
configuration:
buildType: maven
pomFilePath: ./pom.xml
packagesToIgnore:
- "oracle.jdbc.*"
- "org.apache.logging.log4j:1.2"
maxPermissibleCvssV2Score: 5.0
maxPermissibleCvssV3Score: 5.1
freeFormTags:
key1: value1
key2: value2
outputArtifacts:
- name: build-service-demo
type: DOCKER_IMAGE
location: build-service-demo
- name: build-service-demo-kube-manifest
type: BINARY
location: deployment/app.yml
Exemplo 3:
version: 0.1
component: build
timeoutInSeconds: 6000
shell: bash
# Variables
env:
variables:
"testEnv" : "testValue1"
vaultVariables:
docker_registry_password : <secret-ocid>
exportedVariables:
- patch_number
- build_Result
inputArtifacts:
- name: hello-dev-jar
type: STAGE_ARTIFACT
location: /workspace/Source/hello123.class
- name: public-artifact
type: URL
url: https://raw.githubusercontent.com/apache/kafka/trunk/README.md #URL must be publicly accessible
location: /workspace/Source/readme.md
- name: shell_script
type: GENERIC_ARTIFACT
artifactId: ocid1.genericartifact.oc1.iad.0.restoftheocid #appropriate policy is required for access
location: /workspace/Source/script.sh
- name: shell_script
type: GENERIC_ARTIFACT
registryId: ocid1.artifactrepository.oc1.iad.0.restoftheocid #appropriate policy is required for access
path: some_script.sh
version: 2.0
location: /workspace/Source/script.sh
steps:
- type: Command
name: "Build Source"
timeoutInSeconds: 4000
shell: /bin/sh
command: |
# oci cli pre configured with build pipeline resource principal
oci os ns get
javac HelloWorld.java
onFailure:
- type: Command
timeoutInSeconds: 400
shell: /bin/sh
command: |
echo "Handling Failure"
build_result=FAILURE
echo "Failure successfully handled"
timeoutInSeconds: 400
- type: Command
timeoutInSeconds: 400
name: "Dockerizer & Test"
command: |
docker build -t test-image .
onFailure:
- type: Command
command: |
echo "Handling Failure"
build_result=FAILURE
echo "Failure successfully handled"
timeoutInSeconds: 400
- type: Command
timeoutInSeconds: 400
name: "Dockerizer & Test"
command: |
build_result=SUCCESS
patch_number==`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
outputArtifacts:
- name: kube-manifest
type: BINARY
location: ${OCI_WORKSPACE_DIR}/Source/app.yml
- name: hello-dev-image
type: DOCKER_IMAGE
location: test-image
Para criar aplicativos Java de alto desempenho, você pode usar o Oracle GraalVM no pipeline de build. Para instalar e usar o Oracle GraalVM no pipeline de build DevOps, atualize o arquivo de especificação de build. Para obter mais informações e exemplos, consulte Usando o Oracle GraalVM em DevOps Pipelines de Build.