Spécification de compilation
La spécification de compilation contient les étapes et les paramètres utilisés par le pipeline de compilation pour exécuter une compilation.
La spécification de compilation est écrite en YAML. Par défaut, la spécification de création est située à la racine du répertoire de la source de création principale et est utilisée lorsque vous exécutez un pipeline de création. Le nom du fichier est build_spec.yml ou build_spec.yaml. Si la spécification de compilation ne se trouve pas dans le répertoire racine, vous devez indiquer le chemin relatif du fichier lors de l'ajout de l'étape de compilation gérée.
La spécification de compilation se compose des sections suivantes :
- Configuration de l'exécuteur de compilation.
- Configuration des variables d'environnement.
- Artefacts d'entrée.
- Étapes à exécuter dans l'ordre.
- Artefacts de sortie.
Syntaxe de la spécification de compilation
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'est pas disponible sur l'hôte de l'exécution de compilation. Si vous avez besoin des autorisations de superutilisateur, exécutez l'étape de compilation en tant qu'utilisateur racine.Paramètres de la spécification de compilation
Voici la liste des paramètres de la spécification de compilation et leur description :
Paramètre | Description |
---|---|
version |
Obligatoire. Indique la version de la spécification de compilation. Une version manquante ou non valide entraîne l'échec de l'étape de compilation. La valeur prise en charge est |
component |
Obligatoire. Indique un composant spécifique dans DevOps. Une valeur manquante ou non valide entraîne l'échec de la compilation. La valeur prise en charge est |
timeoutInSeconds |
Facultatif. Indique la temporisation pour l'ensemble du fichier de spécification de compilation. Chaque étape peut également avoir sa propre valeur de temporisation. Si aucune valeur n'est spécifiée, la valeur par défaut, 8 heures, est utilisée. La valeur maximale autorisée est 8 heures. |
shell |
Facultatif. Indique l'interpréteur de commandes à utiliser au niveau global de la spécification de compilation. Cette valeur peut éventuellement être remplacée au niveau de l'étape. Les valeurs autorisées sont |
failImmediatelyOnError
|
Facultatif. Indique si la compilation doit continuer si l'une des commandes de l'étape échoue avec une valeur de sortie différente de zéro. Si vous ne spécifiez pas de valeur, la valeur par défaut est false et l'étape continue. Les valeurs autorisées sont true et false . OCI recommande de régler la valeur de cet attribut à true . |
env |
Facultatif. Vous pouvez définir des variables personnalisées. Trois types de variable sont pris en charge :
|
inputArtifacts |
Facultatif. Sert à définir une liste des artefacts d'entrée requis pour exécuter l'étape de compilation courante. Prend en charge les types d'artefact d'entrée suivants :
Les paramètres sont les suivants :
Note : Pour le type d'artefact d'entrée |
steps |
Obligatoire. Cette section définit une liste d'étapes à exécuter.
|
outputArtifacts |
Facultatif. Indique les artefacts produits par l'étape de compilation. Les artefacts produits en tant que sortie dans cette section sont enregistrés pendant toute la durée de l'exécution de compilation courante. Ils peuvent être utilisés dans les étapes suivantes du pipeline de compilation.
|
Types d'étape
Commande
Nom de l'attribut | Description |
---|---|
command |
Les commandes à une seule ligne et à plusieurs lignes sont prises en charge. Toutes les commandes spécifiées dans une étape sont exécutées dans la même session de l'interpréteur de commandes. Selon la valeur de steps/*/shell , il peut s'agir de commandes shell ou bash. L'interruption immédiate n'est pas activée. Pour que l'étape réussisse, la sortie de la dernière commande d'une étape est prise en compte. Si le code de sortie de la dernière commande est 0, l'étape est considérée comme réussie. |
timeoutInSeconds (Facultatif) |
Indique la temporisation de l'étape. Si elle n'est pas indiquée, la valeur est héritée du paramètre timeoutInSeconds global. La valeur maximale autorisée est 8 heures. |
shell (Facultatif) |
Indique le type d'interpréteur de commandes de l'étape courante. Si elle n'est pas spécifiée, la valeur est héritée du paramètre shell global. Les valeurs autorisées sont /bin/sh et shell . |
onFailure (Facultatif) |
Liste d'étapes à exécuter en cas d'échec pour quitter correctement l'étape de compilation. Elles sont exécutées si l'étape correspondante échoue, et suivies de la sortie de la spécification de compilation. La gestion de l'échec n'a aucune incidence sur le statut de l'étape de compilation. Si l'une des étapes échoue, le statut de l'étape de compilation reste |
failImmediatelyOnError (Facultatif) |
Indique si la compilation doit continuer si l'une des commandes de l'étape échoue avec une valeur de sortie différente de zéro. Si vous ne spécifiez pas de valeur, la valeur par défaut est false et l'étape continue. Les valeurs autorisées sont true et false . OCI recommande de régler la valeur de cet attribut à true . La valeur de l'attribut |
Recherche de vulnérabilités
Une audit de vulnérabilité décrit les vulnérabilités de l'application et de ses dépendances. Lorsque vous exécutez une compilation à l'aide du service OCI DevOps, vous pouvez démarrer un balayage de code pour effectuer une nouvelle validation du référentiel de code. La recherche de vulnérabilités se produit à l'étape de compilation gérée.
Dans le fichier de spécification de compilation, une étape de recherche de vulnérabilités de type VulnerabilityAudit
est ajoutée, que le pipeline de compilation DevOps utilise lors de l'exécution de la compilation pour le balayage de code. Les attributs de cette étape sont les suivants :
Nom de l'attribut | Description | Prise en charge de valeurs paramétrées |
---|---|---|
name (Facultatif) |
Nom de l'étape. | S. O. |
vulnerabilityAuditName (Facultatif) |
Nom de la ressource de recherche de vulnérabilités. | Oui |
vulnerabilityAuditCompartmentId (Facultatif)Par défaut : |
OCID du compartiment dans lequel la ressource de vérification doit être créée. | Oui |
knowledgeBaseId (Obligatoire) |
OCID du paramètre fictif/marqueur utilisé pour tenir à jour les détails des ressources de recherche de vulnérabilités. Ressource parent de la ressource de recherche de vulnérabilités. | Oui |
configuration/buildType (Obligatoire) |
Type d'outil de compilation. | S. O. |
configuration/pomFilePath (Obligatoire) |
Emplacement du fichier pom.xml. | Oui |
configuration/packagesToIgnore (Facultatif) |
Liste des ensembles Java à ignorer lors du calcul du résultat du balayage pendant la recherche de vulnérabilités. | S. O. |
configuration/maxPermissibleCvssV2Score (Facultatif)Par défaut : 0.0 |
Note CVSS v2 maximale admissible pour la recherche de vulnérabilités. Toute valeur supérieure à cette configuration doit marquer la compilation comme Failed . |
S. O. |
configuration/maxPermissibleCvssV3Score (Facultatif)Par défaut : 0.0 |
Note CVSS v3 maximale admissible pour la recherche de vulnérabilités. Toute valeur supérieure à cette configuration doit marquer la compilation comme Failed . |
S. O. |
freeFormTags (Facultatif) |
Accepte une paire clé-valeur. | S. O. |
Variables de système prédéfinies
DevOps fournit un jeu de variables de système prédéfinies avec des valeurs par défaut que vous pouvez utiliser, telles que des variables d'environnement dans la spécification de compilation.
Variable | Description |
---|---|
OCI_STAGE_ID |
OCID de l'étape courante. |
OCI_PIPELINE_ID |
OCID du pipeline de compilation courant. |
OCI_BUILD_RUN_ID |
OCID de l'exécution de compilation courante. |
OCI_TRIGGER_COMMIT_HASH |
Code de hachage de validation du déclencheur courant. |
OCI_TRIGGER_SOURCE_BRANCH_NAME |
Branche qui déclenche la compilation. |
OCI_TRIGGER_SOURCE_URL |
URL du référentiel qui a déclenché la compilation. |
OCI_TRIGGER_EVENT_TYPE |
Déclencheur qui a démarré l'événement. |
OCI_PRIMARY_SOURCE_DIR |
Répertoire de travail par défaut de la compilation (répertoire de travail source principal). |
OCI_WORKSPACE_DIR |
Valeur du répertoire de travail. Contient /workspace comme valeur par défaut. |
${OCI_WORKSPACE_DIR}/<source-name> |
Chemin du répertoire source de la compilation.
|
OCI_BUILD_STAGE_NAME |
Nom de l'étape de compilation. |
OCI_PRIMARY_SOURCE_NAME |
Nom de la source de compilation principale. |
OCI_PRIMARY_SOURCE_COMMIT_HASH |
Code de hachage de validation de la source de compilation principale utilisé pour l'exécution de compilation courante. |
OCI_PRIMARY_SOURCE_URL |
URL de la source de compilation principale. |
OCI_PRIMARY_SOURCE_BRANCH_NAME |
Branche de la source de compilation principale utilisée pour l'exécution de compilation courante. |
Exemples de spécification de compilation
Exemple 1 :
version: 0.1
component: build
timeoutInSeconds: 1000
shell: bash
steps:
- type: Command
name: "Build app"
command: |
mvn clean install
exemple 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
exemple 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
Pour créer des applications Java à haute performance, vous pouvez utiliser Oracle GraalVM dans le pipeline de compilation. Pour installer et utiliser Oracle GraalVM dans le pipeline de compilation DevOps, vous devez mettre à jour le fichier de spécification de compilation. Pour obtenir des informations et des exemples, voir Utilisation d'Oracle GraalVM dans les pipelines de compilation DevOps.