Especificación de comando

La especificación de comando contiene los comandos de shell y la configuración que se ejecutan durante un despliegue. La especificación de comando está escrita en YAML. El contenido del archivo se puede especificar en línea, o bien puede almacenar la especificación en un repositorio de Artifact Registry.

Para ejecutar cualquier archivo binario que no esté preinstalado por Oracle, debe descargarlo directamente en la carpeta raíz o descargarlo en la carpeta del espacio de trabajo y, a continuación, moverlo a la carpeta raíz antes de ejecutarlo.

La especificación de comando se organiza en las siguientes secciones:

  • Configuración de las variables de entorno.
  • Artefactos de entrada.
  • Pasos para su ejecución en secuencia.

Sintaxis de especificación de comando

version: 0.1
component: command
timeoutInSeconds: 10000
shell: bash
failImmediatelyOnError: true
env:
  variables:
    key: "value"
    key: "value"
  vaultVariables:
    key: "secret-id"
 
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: 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

Parámetros de especificación de comando

A continuación, se muestran los parámetros de especificación de comando y sus detalles:

Parámetro Descripción
version Obligatorio. Indica la versión de especificación de comando. Una versión que falta o no es válida provoca un fallo en la etapa Shell.

El valor soportado es 0.1.

component Obligatorio. Indica un componente concreto en DevOps. Si falta un valor o no es válido, se produce un fallo en la etapa.

El valor soportado es command.

timeoutInSeconds Opcional. Especifica el timeout para todo el archivo de especificación de comando. Cada 'paso' también puede tener opcionalmente su propio valor de timeout.

Si no se especifica un valor, se utiliza el valor por defecto de 8 horas. El valor máximo permitido es 8 horas.

shell Opcional. Especifica el shell que se utilizará en el nivel global de especificación de comando. El valor se puede sustituir opcionalmente en el nivel de 'paso'.

Los valores permitidos son /bin/sh y bash. Si no se especifica, se utilizará el valor por defecto bash.

failImmediatelyOnError Opcional. Especifica si el despliegue debe continuar en caso de que falle algún comando del paso con un valor de salida distinto de cero. Si no se especifica, el valor por defecto es false y el paso continúa. Los valores permitidos son true y false. OCI recomienda definir el valor de este atributo en true.
env

Opcional. Puede definir variables personalizadas. Hay soportados tres tipos de variables:

  • env/variables: opcional. La clave debe ser una cadena compatible con una variable de entorno POSIX. El valor puede ser cualquier cadena. El ámbito de esta variable es la ejecución del archivo de especificación de comando. Cualquier cambio en el valor de la variable se puede ver en los pasos siguientes. Estas variables están disponibles como variables de entorno para todos los pasos dentro del archivo de especificación de comando.

    Si el valor de la variable contiene el carácter de nueva línea (\n) o retorno de carro (\r), se sustituyen por un espacio en los pasos siguientes.

  • env/vaultVariables: opcional. La clave debe ser una cadena compatible con una variable de entorno POSIX. El valor debe ser un OCID del secreto del almacén. El almacén y el pipeline deben ser del mismo arrendamiento. El arrendamiento debe tener la política adecuada para permitir a los recursos del pipeline de despliegue acceder al secreto.

    El ámbito de esta variable es la ejecución del archivo de especificación de comando y está disponible para todos los pasos del archivo. El valor de estas variables se recupera del almacén y está disponible como variables de entorno para todos los pasos dentro del archivo de especificación de comando.

  • env/exportedVariables: opcional. Aquí se puede declarar una lista de variables. El nombre de la variable debe ser una cadena compatible con una variable de entorno POSIX. El valor se puede asignar en cualquiera de los pasos dentro del archivo de especificación de comando. El ámbito de esta variable es el pipeline de despliegue. Cualquier variable exportada solo está disponible en etapas Shell del mismo pipeline.
inputArtifacts

Opcional. Se utiliza para definir la lista de artefactos de entrada necesarios para ejecutar la etapa Shell actual.

Soporta artefactos genéricos de Artifact Registry.

Los parámetros son los siguientes:

  • inputArtifacts/*/url: opcional. Se debe proporcionar la URL HTTP descargable externa del artefacto de entrada. La URL debe estar disponible públicamente. Actualmente no está soportada la autenticación/autorización.
  • inputArtifacts/*/name: obligatorio. Este nombre se utiliza para hacer referencia a los artefactos en la ejecución de comando.
  • inputArtifacts/*/location: obligatorio. Ruta de destino del sistema de archivos local donde se debe descargar el artefacto de entrada. La ruta se puede especificar en uno de estos métodos:
    • ${OCI_PRIMARY_SOURCE_DIR}/pom.xml
    • ${OCI_WORKSPACE_DIR}/[source-name]/pom.xml
    • /workspace/[source-name]/pom.xml
    • Ruta relativa desde la página inicial del proyecto, pom.xml

    Con cualquiera de los valores, el artefacto de entrada se descarga en el directorio de inicio de origen principal con un nombre de archivo, pom.xml.

    La ubicación no soporta las variables de pipeline o exportedVariables.

  • inputArtifacts/*/type: obligatorio. Tipo del artefacto de entrada que se debe descargar. Los valores permitidos son URL y GENERIC_ARTIFACT.
  • inputArtifacts/*/artifactld: obligatorio. OCID del artefacto. Si ha proporcionado el OCID, el pipeline de despliegue ignora registryId, la ruta y la versión.
  • inputArtifacts/*/registryld: obligatorio. OCID de Artifact Registry.
  • inputArtifacts/*/path: obligatorio. Ruta de destino del artefacto.
  • inputArtifacts/*/version: obligatorio. Versión del artefacto.

Nota: Para el tipo GENERIC_ARTIFACT de artefacto de entrada, puede proporcionar como parámetro obligatorio el OCID del artefacto o una combinación del ID de registro, la ruta de acceso y la versión de artefacto.

steps

Obligatorio. En esta sección se define una lista de pasos que se deben ejecutar.

  • steps/*/type: obligatorio. Especifica el tipo de paso. Soporta los siguientes valores: Command
  • steps/*/name: Opcional. Nombre fácil de recordar para el paso.

Tipos de paso

Comando

Nombre de atributo Descripción
command Están soportados tanto comandos de una sola línea como de varias líneas. Todos los comandos especificados en un paso se ejecutan en la misma sesión de shell. Según el valor steps/*/shell, los comandos pueden ser shell o bash.

Error rápido no está activado. Para que el paso se realice correctamente, se tiene en cuenta la salida del último comando en un paso. Si el último código de salida del comando es 0, el paso se considera correcto.

timeoutInSeconds (opcional) Especifica el timeout del paso. Si no se proporciona, el valor se hereda del parámetro global timeoutInSeconds. El valor máximo permitido es 8 horas.
shell (opcional) Especifica el tipo de shell del paso actual. Si no se especifica, el valor se hereda del parámetro global shell. Los valores permitidos son /bin/sh y shell.
onFailure (opcional) Lista de pasos que se deben ejecutar en caso de fallo para salir correctamente de la etapa Shell. Se ejecuta si falla el paso correspondiente y, después de la ejecución, se sale de la especificación de comando.

El manejo del fallo no afecta al estado de la etapa Shell. Si alguno de los pasos falla, el estado de la etapa Shell sigue siendo failed, aunque se maneja mediante el bloque onFailure.

failImmediatelyOnError (opcional) Especifica si el despliegue debe continuar en caso de que falle algún comando del paso con un valor de salida distinto de cero. Si no se especifica, el valor por defecto es false y el paso continúa. Los valores permitidos son true y false. OCI recomienda definir el valor de este atributo en true.

El valor de atributo failImmediatelyOnError definido en steps tiene prioridad sobre el mismo valor de atributo definido fuera de steps.

Variables del sistema predefinidas

DevOps proporciona un juego de variables predefinidas del sistema con valores por defecto que puede utilizar en la especificación de comando.

Variable Descripción
OCI_DEPLOYMENT_ID OCID del despliegue actual.
OCI_PIPELINE_ID OCID del pipeline de despliegue actual.
OCI_RESOURCE_PRINCIPAL_RPST Token de principal de recurso.
OCI_RESOURCE_PRINCIPAL_VERSION Versión de principal de recurso.
OCI_CLI_AUTH Autenticación de la interfaz de línea de comandos de OCI configurada previamente para utilizar el principal de recurso.
OCI_RESOURCE_PRINCIPAL_REGION Región del principal de recurso.
OCI_RESOURCE_PRINCIPAL_PRIVATE_PEM Ruta de clave privada del principal de recurso.

Ejemplo de especificación de comando

Ejemplo: cree un espacio de nombres de OKE.

version: 0.1
component: command
timeoutInSeconds: 6000
shell: bash

steps:
  - type: Command
    timeoutInSeconds: 600
    name: "Setup kube config and get nodes"
    command: |
      oci ce cluster create-kubeconfig --cluster-id ${clusterid} --file $HOME/.kube/config --region us-ashburn-1 --token-version 2.0.0  --kube-endpoint ${endpoint}
      kubectl get nodes
    onFailure:
      - type: Command
        command: |
          echo "Failed to set up kube config and get nodes"
        timeoutInSeconds: 60