Администратору или разработчику DevOps может потребоваться создать конвейер в Code Streamне через пользовательский интерфейс, а с помощью кода YAML. При создании конвейеров в виде кода можно использовать любой редактор и вставлять комментарии в код конвейера.

В коде конвейера можно обращаться к внешним конфигурациям, таким как переменные среды и учетные данные для безопасного доступа. Переменные, используемые в коде конвейера, можно обновлять, не обновляя код конвейера.

Код YAML конвейера можно использовать в качестве шаблона для клонирования и создания других конвейеров, а также для предоставления общего доступа к шаблонам.

Шаблоны кода конвейеров можно хранить в репозитории системы управления версиями, который назначает версии и отслеживает обновления. Используя систему управления версиями, можно легко создать резервную копию кода конвейера и при необходимости восстановить его.

Необходимые условия

  • Убедитесь в наличии редактора кода.
  • Если планируется хранить код конвейера в репозитории системы управления версиями, убедитесь в наличии доступа к рабочему экземпляру.

Процедура

  1. Создайте файл в редакторе кода.
  2. Скопируйте и вставьте образец кода конвейера и измените его с учетом требований конкретного конвейера.
  3. Чтобы добавить конечную точку в код конвейера, скопируйте и вставьте пример кода конечной точки и измените его с учетом особенностей конечной точки.

    При использовании конечной точки API-интерфейса Kubernetes в рабочей области конвейера Code Stream создает необходимые для выполнения задачи непрерывной интеграции или настраиваемой задачи ресурсы Kubernetes, такие как ConfigMap, Secret и Pod. Code Stream обменивается данными с контейнером с помощью порта узла.

    Рабочая область конвейера Code Stream поддерживает Docker и Kubernetes для выполнения задач непрерывной интеграции и настраиваемых задач.

    Дополнительные сведения о настройке рабочей области см. в разделе Настройка рабочей области конвейера.

  4. Сохраните код.
  5. Чтобы сохранить код конвейера с назначением версии, обновите код в репозитории системы управления версиями.
  6. При создании конвейера непрерывной интеграции и предоставления необходимо импортировать файл Kubernetes YAML.
    Чтобы импортировать файл Kubernetes YAML, выберите его в области непрерывного предоставления смарт-шаблона конвейера и щелкните Обработать. Или используйте API-интерфейс.

Результаты

С помощью примеров кода создан код YAML, который представляет собой конвейер и конечные точки.

Пример: Пример кода YAML для конвейера и конечных точек

Этот пример кода YAML включает в себя разделы, представляющие рабочую область для сборки с помощью встроенных инструментов, этапов, задач, уведомлений и других элементов Code Stream в конвейере.

Примеры кода для поддерживаемых подключаемых модулей см. в разделе Подключение Code Stream к конечным точкам

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

Этот код YAML представляет собой пример конечной точки 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
---

Этот код YAML представляет собой пример конечной точки Kubernetes.

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

Дальнейшие действия

Запустите конвейер и внесите необходимые изменения. См. раздел Запуск конвейера и просмотр результатов.