Come amministratore o sviluppatore DevOps, è possibile che si desideri creare una pipeline in Code Stream utilizzando il codice YAML anziché l'interfaccia utente. Quando si creano pipeline come codice, è possibile utilizzare un editor qualsiasi e inserire commenti nel codice della pipeline.

Nel codice della pipeline, è possibile fare riferimento alle configurazioni esterne, ad esempio le variabili di ambiente e le credenziali di sicurezza. Quando si aggiornano le variabili utilizzate nel codice della pipeline, è possibile aggiornarle senza dover aggiornare il codice della pipeline.

È possibile utilizzare il codice YAML della pipeline come modello per clonare e creare altre pipeline, nonché condividere i modelli con altri utenti.

È possibile archiviare i modelli di codice della pipeline in un repository di controllo dell'origine, che ne esegue il controllo della versione e tiene traccia degli aggiornamenti. Utilizzando un sistema di controllo dell'origine, è possibile eseguire facilmente il backup del codice della pipeline e ripristinarlo, se necessario.

Prerequisiti

  • Verificare di disporre di un editor di codice.
  • Se si intende archiviare il codice della pipeline in un repository di controllo dell'origine, verificare che sia possibile accedere a un'istanza funzionante.

Procedura

  1. Nell'editor di codice, creare un file.
  2. Copiare e incollare il codice della pipeline di esempio e aggiornarlo in base alle esigenze specifiche della pipeline.
  3. Per includere un endpoint nel codice della pipeline, copiare e incollare il codice dell'endpoint di esempio e aggiornarlo in modo che rifletta l'endpoint.

    Quando si utilizza un endpoint API Kubernetes nell'area di lavoro della pipeline, Code Stream crea le risorse Kubernetes necessarie, come ConfigMap, Secret e Pod per eseguire l'attività di integrazione continua (CI) o l'attività personalizzata. Code Stream comunica con il contenitore tramite la NodePort.

    L'area di lavoro della pipeline di Code Stream supporta Docker e Kubernetes per le attività di integrazione continua e le attività personalizzate.

    Per ulteriori informazioni sulla configurazione dell'area di lavoro, vedere Configurazione dell'area di lavoro della pipeline.

  4. Salvare il codice.
  5. Per archiviare e controllare la versione del codice della pipeline, controllare il codice nel repository del controllo dell'origine.
  6. Quando si crea una pipeline di integrazione e consegna continue, è necessario importare il file YAML Kubernetes.
    Per importare il file YAML Kubernetes, selezionarlo nell'area Consegna continua del modello di pipeline smart e fare clic su Elabora. In alternativa, utilizzare l'API.

risultati

Utilizzando gli esempi di codice, è stato creato il codice YAML che rappresenta la pipeline e gli endpoint.

Esempio: Codice YAML di esempio per una pipeline e gli endpoint

In questo esempio di codice YAML sono incluse le sezioni che rappresentano l'area di lavoro per la build nativa, le fasi, le attività e le notifiche di Code Stream e molto altro in una pipeline.

Per esempi di codice per i plug-in supportati, vedere Connessione di Code Stream agli endpoint

---
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:
         - user@yourcompany.com
         - abc@yourcompany.com
      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}
---

Questo codice YAML rappresenta un endpoint Jenkins di esempio.

---
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
---

Questo codice YAML rappresenta un endpoint Kubernetes di esempio.

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

Operazioni successive

Eseguire la pipeline e apportare le modifiche necessarie. Vedere Come eseguire una pipeline e visualizzare i risultati.