Specifica creazione
La specifica di build contiene i passi e le impostazioni di build utilizzati dalla pipeline di build per eseguire una build.
La specifica di build è scritta in YAML. Per impostazione predefinita, la specifica della build si trova nella radice della directory di origine della build primaria ed è utilizzata quando si esegue una pipeline di build. Il nome del file è build_spec.yml o build_spec.yaml. Se la specifica di build non è presente nella directory radice, è necessario fornire un percorso relativo del file quando si aggiunge la fase Build gestita.
La specifica di build è organizzata nelle seguenti sezioni:
- Configurazione del motore di esecuzione build.
- Impostazione delle variabili di ambiente.
- Immettere gli artifact.
- Passi da eseguire in sequenza.
- Artifact di output.
Sintassi specifica 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
non è disponibile nell'host del motore di esecuzione build. Se sono necessarie autorizzazioni di superutente, eseguire il passo della build come utente root.Parametri specifica build
Di seguito sono riportati i parametri della specifica di build e i relativi dettagli:
Parametro | descrizione; |
---|---|
version |
obbligatorio. Indica la versione della specifica build. Una versione mancante o non valida causa un errore della fase di creazione. Il valore supportato è |
component |
obbligatorio. Indica un particolare componente in DevOps. Un valore mancante o non valido causa un errore di generazione. Il valore supportato è |
timeoutInSeconds |
facoltativo. Specifica il timeout per l'intero file di specifica della build. Ogni 'passo' può anche avere un proprio valore di timeout. Se non viene specificato un valore, viene utilizzato il valore predefinito di 8 ore. Il valore massimo consentito è 8 ore. |
shell |
facoltativo. Specifica la shell da utilizzare a livello globale della specifica build. Il valore può essere sostituito facoltativamente a livello di passo. I valori consentiti sono |
failImmediatelyOnError
|
facoltativo. Specifica se la build deve continuare se un comando del passo non riesce con un valore di uscita diverso da zero. Se non viene specificato, il valore predefinito è false e il passo continua. I valori consentiti sono true e false . OCI consiglia di impostare il valore di questo attributo su true . |
env |
facoltativo. È possibile definire variabili personalizzate. Sono supportati tre tipi di variabili:
|
inputArtifacts |
facoltativo. Utilizzato per definire una lista di artifact di input necessari per l'esecuzione della fase di generazione corrente. Supporta i seguenti tipi di artifact di input:
I parametri sono i seguenti:
Nota: per l'artifact di input di tipo |
steps |
obbligatorio. Questa sezione definisce un elenco di passi da eseguire.
|
outputArtifacts |
facoltativo. Specifica gli artifact prodotti dalla fase di creazione. Gli artifact prodotti come output in questa sezione vengono salvati per tutta la durata dell'esecuzione corrente della build. Possono essere utilizzati nelle fasi successive della pipeline di build.
|
Tipi di passo
Comando
Nome attributo | descrizione; |
---|---|
command |
Sono supportati sia comandi a riga singola che comandi a riga multipla. Tutti i comandi specificati in un passo vengono eseguiti nella stessa sessione della shell. I comandi possono essere shell o bash in base al valore steps/*/shell . L'errore di velocità non è abilitato. Affinché il passo abbia successo, viene considerato l'output dell'ultimo comando in un passo. Se il codice di uscita dell'ultimo comando è 0, il passo viene considerato come riuscito. |
timeoutInSeconds (facoltativo) |
Specifica il timeout per il passo. Se non viene fornito, il valore viene ereditato dal parametro timeoutInSeconds globale. Il valore massimo consentito è 8 ore. |
shell (facoltativo) |
Specifica il tipo di shell del passo corrente. Se non specificato, il valore viene ereditato dal parametro shell globale. I valori consentiti sono /bin/sh e shell . |
onFailure (facoltativo) |
Lista di passi che devono essere eseguiti in caso di errore per uscire con grazia dalla fase di build. Eseguire se il passo corrispondente non riesce e, dopo l'esecuzione, la specifica di build viene interrotta. La gestione dell'errore non influisce sullo stato della fase di build. Se uno dei passi non riesce, lo stato della fase di build rimane |
failImmediatelyOnError (facoltativo) |
Specifica se la build deve continuare se un comando del passo non riesce con un valore di uscita diverso da zero. Se non viene specificato, il valore predefinito è false e il passo continua. I valori consentiti sono true e false . OCI consiglia di impostare il valore di questo attributo su true . Il valore dell'attributo |
Audit delle vulnerabilità
Un audit delle vulnerabilità descrive le vulnerabilità dell'applicazione e le relative dipendenze. Quando si esegue una build utilizzando il servizio DevOps OCI, è possibile avviare una scansione del codice per un nuovo commit nel repository di codici. L'audit delle vulnerabilità si verifica nella fase Build gestita.
Nel file delle specifiche di build viene aggiunto un passo di audit delle vulnerabilità di tipo VulnerabilityAudit
che la pipeline di build DevOps utilizza durante l'esecuzione della build per la scansione del codice. Gli attributi di questo passo sono elencati come segue:
Nome attributo | descrizione; | Supporto dei valori con parametri |
---|---|---|
name (facoltativo) |
Nome del passo. | NA |
vulnerabilityAuditName (facoltativo) |
Nome della risorsa di audit delle vulnerabilità. | Sì |
vulnerabilityAuditCompartmentId (Facoltativo)Il valore predefinito è |
OCID del compartimento in cui è necessario creare la risorsa di audit. | Sì |
knowledgeBaseId (obbligatorio) |
OCID del segnaposto/tag per la gestione dei dettagli delle risorse di audit delle vulnerabilità. Risorsa padre della risorsa di audit delle vulnerabilità. | Sì |
configuration/buildType (obbligatorio) |
Tipo di strumento di creazione. | NA |
configuration/pomFilePath (obbligatorio) |
Posizione del file pom.xml. | Sì |
configuration/packagesToIgnore (facoltativo) |
Lista di pacchetti Java da ignorare durante il calcolo del risultato della scansione durante l'audit delle vulnerabilità. | NA |
configuration/maxPermissibleCvssV2Score (facoltativo)Il valore predefinito è 0.0 |
Punteggio massimo v2 CVSS, consentito per l'audit delle vulnerabilità. Qualsiasi elemento al di sopra di questa configurazione deve contrassegnare la build come Failed . |
NA |
configuration/maxPermissibleCvssV3Score (facoltativo)Il valore predefinito è 0.0 |
Punteggio massimo v3 CVSS, consentito per l'audit delle vulnerabilità. Qualsiasi elemento al di sopra di questa configurazione deve contrassegnare la build come Failed . |
NA |
freeFormTags (facoltativo) |
Accetta la coppia chiave-valore. | NA |
Variabili di sistema predefinite
DevOps fornisce un set di variabili di sistema predefinite con valori predefiniti che è possibile utilizzare, ad esempio le variabili di ambiente nella specifica della build.
Variabile | descrizione; |
---|---|
OCI_STAGE_ID |
OCID della fase corrente. |
OCI_PIPELINE_ID |
OCID della pipeline di build corrente. |
OCI_BUILD_RUN_ID |
OCID dell'esecuzione della build corrente. |
OCI_TRIGGER_COMMIT_HASH |
Hash di commit del trigger corrente. |
OCI_TRIGGER_SOURCE_BRANCH_NAME |
Diramazione che attiva la build. |
OCI_TRIGGER_SOURCE_URL |
URL del repository che ha attivato la build |
OCI_TRIGGER_EVENT_TYPE |
Attivazione che ha avviato l'evento. |
OCI_PRIMARY_SOURCE_DIR |
Directory di lavoro predefinita della build (directory di lavoro di origine principale). |
OCI_WORKSPACE_DIR |
Valore della directory di lavoro. Contiene /workspace come valore predefinito. |
${OCI_WORKSPACE_DIR}/<source-name> |
Creare il percorso della directory di origine.
|
OCI_BUILD_STAGE_NAME |
Nome fase build. |
OCI_PRIMARY_SOURCE_NAME |
Nome dell'origine build primaria. |
OCI_PRIMARY_SOURCE_COMMIT_HASH |
Hash di commit dell'origine build primaria utilizzato nell'esecuzione della build corrente. |
OCI_PRIMARY_SOURCE_URL |
URL dell'origine build primaria. |
OCI_PRIMARY_SOURCE_BRANCH_NAME |
Diramazione di origine build primaria utilizzata nell'esecuzione della build corrente. |
Esempi di specifiche di build
Ad esempio 1:
version: 0.1
component: build
timeoutInSeconds: 1000
shell: bash
steps:
- type: Command
name: "Build app"
command: |
mvn clean install
Ad esempio 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
Ad esempio 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
Per creare applicazioni Java ad alte prestazioni, è possibile utilizzare Oracle GraalVM nella pipeline di build. Per installare e utilizzare Oracle GraalVM nella pipeline di build DevOps, è necessario aggiornare il file di specifica della build. Per ulteriori informazioni ed esempi, vedere Uso di Oracle GraalVM in DevOps Pipeline di build.