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 des primären Build-Quellverzeichnisses gespeichert und bei der Ausführung einer Build-Pipeline verwendet. Der Name der Datei lautet "build_spec.yml" oder "build_spec.yaml". Wenn die Build-Spezifikation nicht im Root-Verzeichnis vorhanden ist, müssen Sie beim Hinzufügen der Phase "Verwalteten Build" einen relativen Pfad der 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 Sicherheitsrisikoaudit beschreibt die Schwachstellen der Anwendung und ihre Abhängigkeiten. Wenn Sie einen Build mit dem OCI DevOps-Service ausführen, können Sie einen Codescan 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.yml
Beispiel3:
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
Um 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.