Build-Spezifikation
Die Build-Spezifikation enthält Build-Schritte und -Einstellungen, die von der Build-Pipeline zum Ausführen eines Builds verwendet werden.
Die Build-Spezifikation wird in YAML geschrieben. Die Build-Spezifikation wird standardmäßig im Root-Verzeichnis der primären Build-Quelle gespeichert und bei einer Build-Pipeline verwendet. Der Name der Datei lautet "build_spec.yml" oder "build_spec.yaml". Wenn die Build-Spezifikation im Root-Verzeichnis nicht vorhanden sind, müssen Sie beim Hinzufügen der Phase "Verwalteter Build" einen relativen Pfad für die Datei angeben.
Die Build-Spezifikation ist in folgende Abschnitte unterteilt:
- Konfiguration des Build Runners
- Setup der Umgebungsvariablen
- Eingabeartefakte
- Schritte, die sequenziell ausgeführt werden müssen
- Ausgabeartefakte
Build-Spezifikationssyntax
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 ist auf dem Build-Runner-Host nicht verfügbar. Wenn Sie Superuser-Berechtigungen benötigen, führen Sie den Build-Schritt als Root-Benutzer aus.Build-Spezifikationsparameter
Im Folgenden sind die Build-Spezifikationsparameter und die zugehörigen Details aufgeführt:
| Parameter | Beschreibung |
|---|---|
version
|
Obligatorisch. Gibt die Version der Build-Spezifikation an. Eine fehlende oder ungültige Version führt zu einem Fehler in der Build-Phase. Der unterstützte Wert lautet |
component
|
Obligatorisch. Gibt eine bestimmte Komponente in DevOps an. Ein fehlender oder ungültiger Wert führt zu einem Build-Fehler. Der unterstützte Wert lautet |
timeoutInSeconds
|
Optional. Gibt den Timeout für die gesamte Build-Spezifikationsdatei an. Jeder "Schritt" kann optional auch einen eigenen Timeoutwert haben. Wenn kein Wert angegeben ist, wird der Standardwert "8 Stunden" verwendet. Der maximal zulässige Wert beträgt 8 Stunden. |
shell
|
Optional. Gibt die Shell an, die auf der globalen Ebene der Build-Spezifikation verwendet werden soll. Der Wert kann optional auf Schrittebene überschrieben werden. Zulässige Werte sind |
failImmediatelyOnError
|
Optional. Gibt an, ob der Build fortgesetzt werden muss, wenn ein Befehl im Schritt mit einem Exit-Wert ungleich Null nicht erfolgreich verläuft. Wenn kein Wert angegeben ist, lautet der Standardwert false, und der Schritt wird fortgesetzt. Zulässige Werte sind true und false. OCI empfiehlt, den Wert dieses Attributs auf true zu setzen. |
env
|
Optional. Sie können benutzerdefinierte Variablen definieren. Drei Variablentypen werden unterstützt:
|
inputArtifacts
|
Optional. Wird verwendet, um eine Liste der Eingabeartefakte zu definieren, die für die Ausführung der aktuellen Build-Phase erforderlich sind. Unterstützt die folgenden Typen von Eingabeartefakten:
Folgende Parameter sind verfügbar:
Hinweis: Für den Eingabeartefakttyp |
steps
|
Obligatorisch. In diesem Abschnitt wird eine Liste der Schritte definiert, die ausgeführt werden müssen.
|
outputArtifacts
|
Optional. Gibt die Artefakte an, die in der Build-Phase erzeugt werden. Die in diesem Abschnitt als Ausgabe erzeugten Artefakte werden für die Gültigkeitsdauer der aktuellen Build-Ausführung gespeichert. Sie können in den nachfolgenden Phasen der Build-Pipeline verwendet werden.
|
Schritttypen
Befehl
| Attributname | Beschreibung |
|---|---|
command
|
Sowohl einzeilige als auch mehrzeilige Befehle werden unterstützt. Alle in einem Schritt angegebenen Befehle werden in derselben Shell-Session ausgeführt. Basierend auf dem Wert steps/*/shell kann es sich um Shell- oder Bash-Befehle handeln. Fail-Fast ist nicht aktiviert. Damit der Schritt erfolgreich verläuft, wird die Ausgabe des letzten Befehls in einem Schritt berücksichtigt. Wenn der Exitcode des letzten Befehls 0 ist, wird der Schritt als erfolgreich betrachtet. |
timeoutInSeconds (Optional) |
Gibt den Timeout für den Schritt an. Ist kein Wert angegeben, wird der Wert vom globalen timeoutInSeconds-Parameter übernommen. Der maximal zulässige Wert beträgt 8 Stunden. |
shell (Optional) |
Gibt den Shell-Typ des aktuellen Schritts an. Ist kein Wert angegeben, wird der Wert vom globalen shell-Parameter übernommen. Zulässige Werte sind /bin/sh und shell. |
onFailure (Optional) |
Eine Liste der Schritte, die bei einem Fehler ausgeführt werden müssen, damit die Build-Phase ordnungsgemäß beendet wird. Diese Schritte werden ausgeführt, wenn der entsprechende Schritt nicht erfolgreich verläuft, und nachdem die Ausführung der Build-Spezifikation beendet wurde. Die Bearbeitung des Fehlers wirkt sich nicht auf den Status der Build-Phase aus. Wenn einer der Schritte nicht erfolgreich verläuft, verbleibt die Build-Phase im Status |
failImmediatelyOnError (Optional) |
Gibt an, ob der Build fortgesetzt werden muss, wenn ein Befehl im Schritt mit einem Exit-Wert ungleich Null nicht erfolgreich verläuft. Wenn kein Wert angegeben ist, lautet der Standardwert false, und der Schritt wird fortgesetzt. Zulässige Werte sind true und false. OCI empfiehlt, den Wert dieses Attributs auf true zu setzen. Der unter |
Sicherheitslückenaudit
Ein Sicherheitslückenaudit beschreibt die Sicherheitslücken der Anwendung und ihre Abhängigkeiten. Wenn Sie einen Build mit dem OCI DevOps-Service ausführen, können Sie einen Code-Scan für einen neuen Commit im Code-Repository starten. Der Sicherheitslückenaudit findet in der Phase "Verwalteter Build" statt.
In der Build-Spezifikationsdatei wird ein Sicherheitslückenauditschritt vom Typ VulnerabilityAudit hinzugefügt, den die DevOps-Build-Pipeline während der Build-Ausführung für den Code-Scan verwendet. Die Attribute dieses Schritts werden wie folgt aufgeführt:
| Attributname | Beschreibung | Unterstützung parametrisierter Werte |
|---|---|---|
name (Optional) |
Name des Schritts. | Nicht zutreffend |
vulnerabilityAuditName (Optional) |
Name der Sicherheitslückenauditressource. | Ja |
vulnerabilityAuditCompartmentId (Optional)Standardwert: |
OCID des Compartments, in dem die Auditressource erstellt werden muss. | Ja |
knowledgeBaseId (Obligatorisch) |
OCID des Platzhalters/Tags zum Verwalten der Details der Sicherheitslückenauditressource. Übergeordnete Ressource der Sicherheitslückenauditressource. | Ja |
configuration/buildType (Obligatorisch) |
Build-Tooltyp. | Nicht zutreffend |
configuration/pomFilePath (Obligatorisch) |
Speicherort der pom.xml-Datei. | Ja |
configuration/packagesToIgnore (Optional) |
Liste der Java-Packages, die bei der Berechnung des Scanergebnisses während des Sicherheitslückenaudits ignoriert werden sollen. | Nicht zutreffend |
configuration/maxPermissibleCvssV2Score (Optional)Standardwert: 0.0 |
Maximaler v2-CVSS-Score, der für das Sicherheitslückenaudit zulässig ist. Alle Elemente über dieser Konfiguration müssen den Build als Failed markieren. |
Nicht zutreffend |
configuration/maxPermissibleCvssV3Score (Optional)Standardwert: 0.0 |
Maximaler v3-CVSS-Score, der für das Sicherheitslückenaudit zulässig ist. Alle Elemente über dieser Konfiguration müssen den Build als Failed markieren. |
Nicht zutreffend |
freeFormTags (Optional) |
Akzeptiert Schlüssel/Wert-Paare. | Nicht zutreffend |
Vordefinierte Systemvariablen
DevOps stellt vordefinierte Systemvariablen mit Standardwerten bereit, die Sie wie Umgebungsvariablen in der Build-Spezifikation verwenden können.
| Variable | Beschreibung |
|---|---|
OCI_STAGE_ID
|
Die OCID der aktuellen Phase. |
OCI_PIPELINE_ID
|
Die OCID der aktuellen Build-Pipeline. |
OCI_BUILD_RUN_ID
|
Die OCID der aktuellen Build-Ausführung. |
OCI_TRIGGER_COMMIT_HASH
|
Commit-Hash des aktuellen Triggers. |
OCI_TRIGGER_SOURCE_BRANCH_NAME
|
Verzweigung, die den Build auslöst. |
OCI_TRIGGER_SOURCE_URL
|
Repository-URL, die den Build ausgelöst hat. |
OCI_TRIGGER_EVENT_TYPE
|
Trigger, der das Ereignis gestartet hat. |
OCI_PRIMARY_SOURCE_DIR
|
Standardarbeitsverzeichnis des Builds (Arbeitsverzeichnis der primären Quelle). |
OCI_WORKSPACE_DIR
|
Wert des Arbeitsverzeichnisses. Enthält /workspace als Standardwert. |
${OCI_WORKSPACE_DIR}/<source-name>
|
Verzeichnispfad der Build-Quelle.
|
OCI_BUILD_STAGE_NAME
|
Name der Build-Phase. |
OCI_PRIMARY_SOURCE_NAME
|
Name der primären Build-Quelle. |
OCI_PRIMARY_SOURCE_COMMIT_HASH
|
Der Commit-Hash der primären Build-Quelle, der in der aktuellen Build-Ausführung verwendet wird. |
OCI_PRIMARY_SOURCE_URL
|
URL der primären Build-Quelle. |
OCI_PRIMARY_SOURCE_BRANCH_NAME
|
Die Verzweigung der primären Build-Quelle, die in der aktuellen Build-Ausführung verwendet wird. |
Beispiele für Build-Spezifikationen
Beispiel 1:
version: 0.1
component: build
timeoutInSeconds: 1000
shell: bash
steps:
- type: Command
name: "Build app"
command: |
mvn clean install
Beispiel 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.ymlBeispiel3:
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-imageUm leistungsstarke Java-Anwendungen zu erstellen, können Sie Oracle GraalVM in der Build-Pipeline verwenden. Um Oracle GraalVM in der Build-Pipeline DevOps zu installieren und zu verwenden, müssen Sie die Build-Spezifikationsdatei aktualisieren. Weitere Informationen und Beispiele finden Sie unter Oracle GraalVM in DevOps-Build-Pipelines verwenden.