Deployment-Konfigurationsdatei

Die Deployment-Konfigurationsdatei definiert die Artefakte, die in die Instanz heruntergeladen werden sollen, sowie den Speicherort, an den die Artefakte kopiert werden müssen. Die Konfigurationsdatei gibt auch die Befehlssequenz für das Deployment an.

Die Konfigurationsdatei ist in YAML geschrieben. Die Datei kann inline definiert oder als generische Artefaktreferenz während des Instanzgruppen-Deployments angegeben werden.

DevOps-Administratoren können die Deployment-Konfigurationsdatei für die folgenden Aktionen verwenden:

  • Anwendungspackages und deren Speicherorte für die Ziel-Compute-Instanz angeben
  • Schritte angeben, die für das Deployment einer Anwendung erforderlich sind
  • Benutzerdefinierte oder integrierte Umgebungsvariablen angeben, die für das Deployment erforderlich sind

Struktur der Deployment-Konfigurationsdatei

Die Deployment-Konfigurationsdatei ist im Allgemeinen wie folgt aufgebaut:

{
version:     
component:   
env: 
    variables:        
timeoutInSeconds:  
files:  
  - source:
    destination:                              
steps:                              
  - stepType: Command 
    name:
    command:
    runAs:
    timeoutInSeconds:
  - stepType: Command 
}

Im Folgenden werden die Deployment-Konfigurationsparameter und die zugehörigen Details aufgeführt:

Parameter Beschreibung
version Versionsnummer der Spezifikationsdatei. Der Wert muss 1.0 sein.
component Komponentenwert. Der einzige unterstützte Wert ist deployment.
shell Optional. Gibt die Shell an, die auf der globalen Ebene der Deployment-Spezifikation verwendet werden soll. Der Wert kann auf Schrittebene überschrieben werden. Zulässige Werte sind /bin/sh und bash. Wenn kein Wert angegeben ist, wird der Standardwert bash verwendet.
env: variables

Benutzerdefinierte Umgebungsvariablen, die für die ausführbaren Dateien oder bash-Befehle verfügbar sind, die beim Deployment ausgeführt werden.

Beispiele: key1: static-value, key2: ${PASSED_FROM_PIPELINE}

Integrierte Variablen können ebenfalls verwendet werden. Um Konflikte zu vermeiden, haben integrierte Variablen das Präfix OCI_DEVOPS.

Integrierte Variablen sind:

  • OCI_DEVOPS_PIPELINE_ID
  • OCI_DEVOPS_STAGE_ID
  • OCI_DEVOPS_DEPLOYMENT_ID

env ist ein optionaler Parameter.

env: vaultVariables Optional. Der Schlüssel muss eine Zeichenfolge und mit POSIX-Umgebungsvariablen konform sein. Der Wert muss eine Oracle Cloud-ID (OCID) des Secrets aus dem Vault sein. Der Vault und die Deployment-Pipeline müssen demselben Mandanten angehören. Der Mandant muss über die entsprechende Policy verfügen, damit Deployment-Pipelineressourcen auf das Secret zugreifen können.

Der Geltungsbereich dieser Variablen ist die Ausführung der Deployment-Spezifikationsdatei und steht in allen Schritten in der Datei zur Verfügung. Die Werte für diese Variablen werden aus dem Vault abgerufen und als Umgebungsvariablen für alle Schritte in der Deployment-Spezifikationsdatei zur Verfügung gestellt.

files

Gibt die in der Deployment-Pipeline definierten Artefakte an, die kopiert werden müssen, und den Speicherort der Ziel-Compute-Instanz, in die sie kopiert werden sollen. Dieser Parameter ist optional.

Der konfigurierte Benutzer ocarun ist standardmäßig Eigentümer des angegebenen Verzeichnisses und muss über Schreib- und Ausführungsberechtigungen (chmod u+wrx) verfügen. Wenn der Zielordner nicht vorhanden ist, wird er beim DevOps-Deployment erstellt. Um dies zuzulassen, muss ocarun (oder der konfigurierte Benutzer) über Schreib- und Ausführungsberechtigungen für das übergeordnete Verzeichnis des angegebenen Zielverzeichnisses verfügen.

Beispiel: Wenn Sie das Zielverzeichnis in der Deployment-Konfigurationsdatei als /var/services/accountService zuweisen, müssen Sie dem konfigurierten Benutzer Schreib- und Ausführungsberechtigungen für /var/services und Ausführungsberechtigungen für /var erteilen.

files: source

Gibt den Quellspeicherort der Artefakte an. Die Quelle kann eine Datei oder einen Ordner referenzieren. Wenn die Quelle eine Datei ist, wird diese Datei in den im Ziel definierten Ordner kopiert. Wenn es sich um einen Ordner handelt, wird der gesamte Inhalt dieses Ordners in das Ziel kopiert. Die Quelle verwendet den relativen Pfad, dessen Root der Root-Ordner eines oder mehrerer Artefakte ist.

Geben Sie den vollständigen Namen des Artefakts einschließlich der Dateityperweiterung an. Beispiel: Wenn die Datei in der Quelle test.sh lautet, muss der Artefaktpfad test.sh oder folder-name/test.sh lauten, wenn sich die Datei in einem Ordner befindet.

Beispiel: Wenn das allgemeine Artefakt eine einzelne Datei (run.sh) angibt, wird diese Datei in den Root-Ordner (/) in der Quelle heruntergeladen. Wenn das allgemeine Artefakt ein Archiv ist (z.B. app_pkg.zip), dann ist die Root des Archivinhalts der Root-Ordner.

files: destination Gibt den Zielordner an, in den die Quelldatei oder der Quellordner kopiert werden muss. OCI DevOps empfiehlt, das Ziel als Staging-Verzeichnis für den Produktionscode zu berücksichtigen, da der Inhalt des Zielverzeichnisses bei jedem Deployment überschrieben wird.

Im folgenden Beispiel für eine Deployment-Spezifikation werden zwei Verzeichnisse erwähnt. Das Zielverzeichnis ist /var/ocarun_staging/app1_staging_folder, und das Produktionsverzeichnis ist var/ocarun_prod/main_app.

steps Gibt die Liste der Schritte an, die während des Deployments sequenziell ausgeführt werden. Jeder Schritt wird als ein anderer Prozess auf der Instanz ausgeführt. Alle angegebenen integrierten und benutzerdefinierten Umgebungsvariablen werden an den Prozess übergeben.
steps: name Benutzerdefinierter Name für den Schritt.
steps: command

Shell-Befehl oder ausführbare Shell-Datei.

Wenn der Parameter files in der Konfigurationsdatei angegeben ist, handelt es sich bei dem Pfad zum Speicherort der ausführbaren Datei um einen absoluten Pfad. Beispiel: /genericArtifactDemo/start.sh. Wenn der Parameter files nicht angegeben ist, wird der relative Pfad verwendet, um den Speicherort der ausführbaren Datei anzugeben. Der relative Pfad referenziert den Arbeitsordner des Deployments. Die Artefakte werden heruntergeladen und in den aktuellen Arbeitsordner des Deployments extrahiert.

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. Der mehrzeilige Befehl funktioniert wie ein bash-Skript. Geben Sie für den Fail-Fast eines mehrzeiligen Befehls den mehrzeiligen Befehl mit set -e \n <rest of the commands> (für ein Bash-Skript) an, damit das Skript beim ersten nicht erfolgreichen Befehl beendet wird.

Beispiel: Wenn Sie den Befehl wrongcommand \n /usr/bin/sudo -n -u root -E /home/opc/scripts/stop.sh \n echo \"Done\" als set -e \n wrongcommand \n /usr/bin/sudo -n -u root -E /home/opc/scripts/stop.sh \n echo \"Done\" angeben, wird das Skript bei wrongcommand beendet.

steps: runAs Führen Sie den Schritt als der angegebene Benutzer aus. Standardmäßig werden alle Schritte als Benutzer ocarun ausgeführt.
steps: timeoutInSeconds Gibt den Timeoutzeitraum zum Abschließen eines Schrittes an.
steps: 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.
steps: onFailure Eine Liste der Schritte, die bei einem Fehler ausgeführt werden müssen, damit die Deployment-Phase ordnungsgemäß beendet wird. Befehle unter dem Abschnitt onFailure werden nur ausgeführt, wenn der entsprechende Schritt nicht erfolgreich verläuft. Nach der Ausführung wird die Deployment-Spezifikation beendet. Die Bearbeitung des Fehlers wirkt sich nicht auf den Status der Deployment-Phase aus. Wenn einer der Schritte nicht erfolgreich verläuft, bleibt der Status der Deployment-Phase "Nicht erfolgreich".

Beispiel für eine Deployment-Konfigurationsdatei:

version: 1.0
component: deployment
runAs: ocarun
env: 
  variables: 
    version: ${appVersion}
  vaultVariables:
    SECRET_ID: "OCID of the secret in the vault"    
files: 
  - source: /
    destination: /var/ocarun_staging/app1_staging_folder
steps: 
  - stepType: Command
    name: Validate Variables
    command: echo "Version = ${version}:  Secret = ${SECRET_ID}"
    timeoutInSeconds: 60
  - stepType: Command
    name: Stop currently-running application
    command: cd /var/ocarun_prod/main_app; ./stop.sh
    timeoutInSeconds: 600
  - stepType: Command
    name: Clean old version of source code in prod directory
    command: echo "Perform suitable cleanup"
    timeoutInSeconds: 600
  - stepType: Command
    name: Copy new version of source code from staging directory to prod directory
    command: cp -R /var/ocarun_staging/app1_staging_folder/main_app /var/ocarun_prod/
    timeoutInSeconds: 600
  - stepType: Command
    name: Install application
    command: cd /var/ocarun_prod/main_app; ./install.sh
    timeoutInSeconds: 600
  - stepType: Command
    name: Run application
    command: cd /var/ocarun_prod/main_app; ./start.sh
    timeoutInSeconds: 600

Beispiel für eine cloud-init-Datei zum Einrichten der beiden Verzeichnisse (Staging und Produktion):

#cloud-config
users:
  - default
  - name: ocarun
    sudo: ALL=(ALL) NOPASSWD:ALL

# Create two directories, one for staging and one for production.
runcmd:
  - [mkdir, -p, /var/ocarun_staging]
  - [mkdir, -p, /var/ocarun_prod]
  - [chown, ocarun, /var/ocarun_staging]
  - [chown, ocarun, /var/ocarun_prod]

Beispiel zum Verständnis mehrerer Einträge für Quelle und Ziel:

version: 1.0
component: deployment
runAs: root
shell: bash
env:
  variables:
    version: ${appVersion}
  vaultVariables:
    docker_registry_password : <secret-ocid>  
files:
  # This section is to define how the files in the artifact is put on the compute instance.
  # Multiple entires are supported using a separate source destination section for every entry.
  - source: /
    destination: /genericArtifactDemo
  - source: /tmp/file1
    destination: /var/applicationPath/someDir1
  - source: /tmp/file2
    destination: /var/applicationPath/someDir2  
steps:
  # This section is to define the scripts that each step runs on the instance after file copy.
  - stepType: Command
    name: Install Apache Web Server
    command: /genericArtifactDemo/install_dependencies.sh
    runAs: root
    timeoutInSeconds: 600
  - stepType: Command
    name: Stop Web Server
    command: /genericArtifactDemo/stop.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: Install New Version of Software
    command: /genericArtifactDemo/install.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: Start Web Server
    command: /genericArtifactDemo/start.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: stop and install
    command: |
      /scripts/stop.sh
      echo "Done stop.sh.."
      /scripts/install_dependencies.sh
      echo "Done install_dependencies.sh.."
      /scripts/install.sh
      echo "Done install.sh.."
    timeoutInSeconds: 1200
    runAs: root
    shell: /bin/sh
    onFailure:
       - stepType: Command
         command: /scripts/recovery_steps.sh
         name:"OnFailure step"
         timeoutInSeconds: 1200

Deployment-Konfigurationsdatei ausführen

Der DevOps-Service verwendet den RunCommand-Agent, um die in der Konfigurationsdatei angegebenen Befehle auf der Ziel-Compute-Instanz auszuführen. Weitere Informationen zum Aktivieren des RunCommand-Plug-ins finden Sie unter In Instanzgruppen bereitstellen im Abschnitt "Voraussetzungen". Wenn die Deployment-Konfigurationsdatei Platzhalter enthält, werden sie durch die in der Parameterliste des Deployments definierten Werte ersetzt. Siehe Parameter konfigurieren.