Como administrador o desarrollador de DevOps, es posible que desee crear una canalización en Code Stream mediante código YAML en lugar de usar la interfaz de usuario. Cuando crea canalizaciones como código, puede utilizar cualquier editor e insertar comentarios en el código de la canalización.

En el código de la canalización, puede consultar configuraciones externas (por ejemplo, variables de entorno y credenciales de seguridad). Cuando actualice las variables que utiliza en el código de la canalización, podrá actualizarlas sin tener que actualizar el código de la canalización.

Puede utilizar el código YAML de la canalización como una plantilla para clonar y crear otras canalizaciones, y puede compartir las plantillas con otros.

Puede almacenar las plantillas de código de la canalización en un repositorio de control de origen, el cual controla sus versiones y realiza un seguimiento de las actualizaciones. Mediante un sistema de control de origen, puede realizar fácilmente una copia de seguridad del código de la canalización y restaurarlo si es necesario.

Requisitos previos

  • Compruebe que tenga un editor de código.
  • Si planea almacenar el código de la canalización en un repositorio de control de origen, compruebe que puede acceder a una instancia en funcionamiento.

Procedimiento

  1. En el editor de código, cree un archivo.
  2. Copie y pegue el código de la canalización de ejemplo, y actualícelo para reflejar las necesidades de canalización específicas.
  3. Para incluir un endpoint en el código de la canalización, copie y pegue el código de endpoint de ejemplo, y actualícelo para que refleje el endpoint.

    Cuando se utiliza un endpoint de API de Kubernetes en el área de trabajo de la canalización, Code Stream crea los recursos de Kubernetes necesarios, como ConfigMap, Secret y Pod, para ejecutar la tarea de integración continua (continuous integration, CI) o la tarea personalizada. Code Stream se comunica con el contenedor mediante NodePort.

    El área de trabajo de canalización de Code Stream admite Docker y Kubernetes para tareas de integración continua y tareas personalizadas.

    Para obtener más información sobre la configuración del área de trabajo, consulte Configurar el área de trabajo de la canalización.

  4. Guarde el código.
  5. Para almacenar el código de la canalización y controlar su versión, inserte el código en el repositorio de control de origen.
  6. Al crear una canalización de integración y entrega continuas, debe importar el archivo YAML de Kubernetes.
    Para importar el archivo YAML de Kubernetes, selecciónelo en el área Entrega continua de la plantilla de canalización inteligente y haga clic en Proceso. Como alternativa, use la API.

Resultados

Con los ejemplos de código, se crea el código YAML que representa la canalización y los endpoints.

Ejemplo: Ejemplo de código YAML para canalización y endpoints

En este ejemplo de código YAML, se incluyen secciones que representan el área de trabajo de las fases, las tareas, las notificaciones y la compilación nativa de Code Stream en una canalización, entre otros elementos.

Para obtener ejemplos de código de complementos compatibles, consulte Conectar Code Stream a endpoints

---
kind: PIPELINE
name: myPipelineName
tags:
  - tag1
  - tag2
 
 
# Ready for execution
enabled: false
 
#Max number of concurrent executions
concurrency: 10
 
#Input Properties
input:
  input1: '30'
  input2: 'Hello'
 
#Output Properties
output:
  BuildNo: '${Dev.task1.buildNo}'
  Image: '${Dev.task1.image}'
 
#Workspace Definition
ciWorkspace:
  image: docker:maven-latest
  path: /var/tmp
  endpoint: my-k8s
  cache:
    - ~/.m2
 
# Starred Properties
starred:
  input: input1
  output: output1
   
# Stages in order of execution
stageOrder:
  - Dev
  - QA
  - Prod
 
# Task Definition Section
stages:
  Dev:
    taskOrder:
      - Task1, Task6
      - Task2 Long, Task Long Long
      - Task5
    tasks:
      Task1:
        type: jenkins
        ignoreFailure: false
        preCondition: ''
        endpoints:
          jenkinsServer: myJenkins
        input:
          job: Add Two Numbers
          parameters:
            number1: 10
            number2: 20
      Task2:
        type: blah
        # repeats like Task1 above
  QA:
    taskOrder:
      - TaskA
      - TaskB
    tasks:
      TaskA:
        type: ssh
        ignoreFailure: false
        preCondition: ''
        input:
          host: x.y.z.w
          username: abcd
          password: ${var.mypassword}
          script: >
            echo "Hello, remote server"
      TaskB:
        type: blah
        # repeats like TaskA above
 
# Notificatons Section
notifications:
  email:
    - stage: Dev #optional ; if not found - use pipeline scope
      task: Task1 #optional; if not found use stage scope
      event: SUCCESS
      endpoint: default
      to:
         - [email protected]
         - [email protected]
      subject: 'Pipeline ${name} has completed successfully'
      body: 'Pipeline ${name} has completed successfully'
       
  jira:
    - stage: QA #optional ; if not found - use pipeline scope
      task: TaskA #optional; if not found use stage scope
      event: FAILURE
      endpoint: myJiraServer
      issuetype: Bug
      project: Test
      assignee: abc
      summary: 'Pipeline ${name} has failed'
      description: |-
        Pipeline ${name} has failed
        Reason - ${resultsText}
  webhook:
    - stage: QA #optional ; if not found - use pipeline scope
      task: TaskB #optional; if not found use stage scope
      event: FAILURE
      agent: my-remote-agent
      url: 'http://www.abc.com'
      headers: #requestHeaders: '{"build_no":"123","header2":"456"}'
          Content-Type: application/json
          Accept: application/json
      payload: |-
        Pipeline ${name} has failed
        Reason - ${resultsJson}
---

Este código YAML representa un ejemplo de endpoint de Jenkins.

---
name: My-Jenkins
tags:
- My-Jenkins
- Jenkins
kind: ENDPOINT
properties:
  offline: true
  pollInterval: 15.0
  retryWaitSeconds: 60.0
  retryCount: 5.0
  url: http://urlname.yourcompany.com:8080
description: Jenkins test server
type: your.jenkins:JenkinsServer
isLocked: false
---

Este código YAML representa un ejemplo de endpoint de Kubernetes.

---
name: my-k8s
tags: [
  ]
kind: ENDPOINT
properties:
  kubernetesURL: https://urlname.examplelocation.amazonaws.com
  userName: admin
  password: encryptedpassword
description: ''
type: kubernetes:KubernetesServer
isLocked: false
---

Qué hacer a continuación

Ejecute la canalización y realice los ajustes necesarios. Consulte Cómo ejecutar una canalización y ver los resultados.