Als DevOps-Administrator oder -Entwickler möchten Sie möglicherweise eine Pipeline in Code Stream erstellen, indem Sie YAML-Code anstelle der Benutzeroberfläche verwenden. Wenn Sie Pipelines als Code erstellen, können Sie einen beliebigen Editor verwenden und Kommentare in den Pipeline-Code einfügen.

Sie können im Pipeline-Code auf externe Konfigurationen verweisen, wie z. B. Umgebungsvariablen und Sicherheitsanmeldedaten. Wenn Sie im Pipeline-Code verwendete Variablen aktualisieren, können Sie sie ohne Update des Pipeline-Codes aktualisieren.

Sie können den YAML-Pipeline-Code als Vorlage verwenden, um andere Pipelines zu klonen und zu erstellen, und die Vorlagen für andere Benutzer freigeben.

Sie können die Pipeline-Codevorlagen in einem Repository der Quellcodeverwaltung speichern, in dem die Vorlagen versioniert und Aktualisierungen verfolgt werden. Mithilfe eines Quellcodeverwaltungssystems können Sie den Pipeline-Code problemlos sichern und bei Bedarf wiederherstellen.

Voraussetzungen

  • Stellen Sie sicher, dass Sie über einen Code-Editor verfügen.
  • Wenn Sie den Pipeline-Code in einem Repository der Quellcodeverwaltung speichern möchten, stellen Sie sicher, dass Sie auf eine funktionierende Instanz zugreifen können.

Prozedur

  1. Erstellen Sie im Code-Editor eine Datei.
  2. Kopieren und fügen Sie den Pipeline-Beispielcode ein und aktualisieren Sie ihn, um Ihre spezifischen Pipeline-Anforderungen anzuzeigen.
  3. Zur Aufnahme eines Endpoints in den Pipeline-Code kopieren Sie den Endpoint-Beispielcode, fügen ihn ein und aktualisieren ihn entsprechend dem Endpoint.

    Wenn Sie einen Kubernetes-API-Endpoint im Arbeitsbereich der Pipeline verwenden, erstellt Code Stream die erforderlichen Kubernetes-Ressourcen, wie z. B. ConfigMap, geheimen Schlüssel und Pod, um die CI- (Continuous Integration) oder benutzerdefinierte Aufgabe auszuführen. Code Stream kommuniziert mit dem Container über den NodePort.

    Der Arbeitsbereich der Code Stream-Pipeline unterstützt Docker und Kubernetes für CI- und benutzerdefinierte Aufgaben.

    Weitere Informationen zum Konfigurieren des Arbeitsbereichs finden Sie unter Konfigurieren des Pipeline-Arbeitsbereichs.

  4. Speichern Sie den Code.
  5. Zum Speichern und Versionieren des Pipeline-Codes checken Sie den Code in das Repository der Quellcodeverwaltung ein.
  6. Wenn Sie eine Pipeline für kontinuierliche Integration und Bereitstellung erstellen, müssen Sie die Kubernetes-YAML-Datei importieren.
    Zum Importieren der Kubernetes-YAML-Datei wählen Sie sie im Bereich „Kontinuierliche Bereitstellung“ der intelligenten Pipeline-Vorlage aus und klicken Sie auf Prozess. Verwenden Sie alternativ die API.

Ergebnisse

Mithilfe der Codebeispiele haben Sie den YAML-Code erstellt, der die Pipeline und Endpoints angibt.

Beispiel: YAML-Beispielcode für eine Pipeline und Endpoints

Dieser YAML-Beispielcode enthält Abschnitte, die den Arbeitsbereich für den nativen Code Stream-Build, Phasen, Aufgaben, Benachrichtigungen usw. in einer Pipeline anzeigen.

Codebeispiele für unterstützte Plug-Ins finden Sie unter Verbinden von Code Stream mit 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}
---

Dieser YAML-Code stellt einen Jenkins-Beispiel-Endpoint dar.

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

Dieser YAML-Code stellt einen Kubernetes-Beispiel-Endpoint dar.

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

Nächste Maßnahme

Führen Sie die Pipeline aus und nehmen Sie nach Bedarf Anpassungen vor. Weitere Informationen hierzu finden Sie unter Vorgehensweise zum Ausführen einer Pipeline und Anzeigen von Ergebnissen.