Como administrador ou desenvolvedor de DevOps, você pode querer criar um pipeline no Code Stream usando o código YAML, em vez de usar a interface do usuário. Ao criar pipelines como código, você pode usar qualquer editor e inserir comentários no código do pipeline.

No seu código de pipeline, você pode fazer referência a configurações externas, como variáveis de ambiente e credenciais de segurança. Ao atualizar as variáveis que você usa no seu código de pipeline, a atualização pode ser feita sem a necessidade de atualizar o código do pipeline.

Você pode usar o código YAML do pipeline como modelo para clonar e criar outros pipelines e compartilhar os modelos com outros.

Você pode armazenar seus modelos de código de pipeline em um repositório de controle de origem, que cria versões desses modelos e rastreia atualizações. Usando um sistema de controle de origem, você pode fazer backup do seu código de pipeline facilmente e restaurá-lo se necessário.

Pré-requisitos

  • Verifique se você tem um editor de código.
  • Se você planeja armazenar seu código de pipeline em um repositório de controle de origem, verifique se é possível acessar uma instância operacional.

Procedimento

  1. No editor de códigos, crie um arquivo.
  2. Copie e cole o código do pipeline de amostra e atualize-o para refletir as suas necessidades de pipeline específicas.
  3. Para incluir um endpoint do no seu código de pipeline, copie e cole o exemplo de código do endpoint e atualize-o para refletir seu endpoint.

    Ao usar um endpoint API do Kubernetes no espaço de trabalho do pipeline, o Code Stream cria os recursos do Kubernetes necessários, como ConfigMap, Segredo e Pod, para executar a tarefa de integração contínua (CI) ou personalizada. O Code Stream se comunica com o contêiner usando a NodePort.

    O espaço de trabalho do pipeline do Code Stream é compatível com o Docker e o Kubernetes para tarefas de integração contínua e personalizadas.

    Para obter mais informações sobre a configuração do espaço de trabalho, consulte Como configurar o espaço de trabalho do pipeline.

  4. Salve o código.
  5. Para armazenar e criar uma versão do seu código de pipeline, verifique o código no repositório de controle de origem.
  6. Ao criar um pipeline de integração e entrega contínuas, você deve importar o arquivo YAML do Kubernetes.
    Para importar o arquivo YAML do Kubernetes, selecione-o na área Entrega Contínua do modelo de pipeline inteligente e clique em Processar. Se preferir, use a API.

Resultados

Usando os exemplos de código, você criou o código YAML que representa o pipeline e os endpoints.

Exemplo: Exemplo de código YAML para um pipeline e endpoints

Este exemplo de código YAML inclui seções que representam o espaço de trabalho para a compilação nativa do Code Stream, estágios, tarefas, notificações e muito mais em um pipeline.

Para obter exemplos de códigos para plug-ins com suporte, consulte Como conectar o Code Stream aos 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 um endpoint do Jenkins de exemplo.

---
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 um endpoint do Kubernetes de exemplo.

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

O que Fazer Depois

Execute o pipeline e faça os ajustes necessários. Consulte Como executar um pipeline e ver os resultados.