Рубрики
Uncategorized

Увеличение наблюдательности трубопровода CI / CD в Jenkins X

Обзор Вы, возможно, слышали о наблюдаемости, учитывая, что люди говорили о … Теги от наблюдаемости, jenkinsx, kubernetes, devops.

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

Наблюдаемость, безусловно, релевантна сегодня, учитывая микросервисные архитектуры, распределенные системы, а также характеристики современных приложений, развернутых в более быстром темпе, используя трубопроводы CI/CD в Kubernetes, в этом случае используя Jenkins X. Действительно, старые практики настройки мониторинга после развертывания приложения, больше не приемлемы.

Посмотрим на него, современные приложения призывают к современному приборому инструментариям, а не только когда они развернуты; Даже во время сборки наличие надлежащих приборов может помочь вам получить представление о том, что происходит на различных этапах процесса сборки и выпуска. Это может включать в себя обнаружение любых проблем задержки, производительности и загрузки зависимости. Другими словами, приборы и мониторинг следует запекать в наш трубопровод в Jenkins X!

Учитывая, что jenkins x — нативная платформа CI/CD для Kubernetes, мы должны начать думать о наблюдаемости в контексте сборки и выпуска наших контейнерных приложений через эту платформу, а не после самого процесса развертывания.

Сегодня я прогуливаю вас через процесс увеличения наблюдательности в вашем конвейере по сборке и освобождению, путем реализации трассировки для нескольких событий, таких как Установка NPM и NPM тест которые являются частью образца приложения Nodejs.

ПРИМЕЧАНИЕ: Трассировка — это лишь небольшая часть других вещей, которые необходимо на месте. Регистрация и метрики также требуются. Комбинация и агрегация этих данных позволяет понимать, насколько наблюдается ваш трубопровод.

Диаграмма по: Питер Бургон

Используя сторонние инструменты

Jenkins X был построен с учетом расширяемости и гибкости. Сегодня вы можете легко создать QuickStarts для языка не реализован. Вы также можете построить Аддоны увеличить функциональность платформы. В настоящее время есть Аддоны для ISTIO , Prometheus и Анкор назвать несколько. Учитывая эту расширяемость, мы поощряем нашему сообществу создавать эти компоненты и поделиться со всеми.

Если вы осмотрите вокруг, вы найдете это Соты находится на переднем крае наблюдательности. Мы сотрудничаем с ними, чтобы в конечном итоге есть Соты Аддон Дженкинс Х.

В этом посте мы используем API ConeeComb.io, чтобы проследить наши трубопроводные события.

Трассировка CI/CD трубопроводных событий

В этом сценарии мы хотим отслеживать начало и окончание времени для определенных событий. В нашем примере приложение Nodejs у нас есть команды, такие как NPM установить и NPM тест которые являются частью нашего Build-Pack Трубопровод из коробки. Чтобы запускать трассировку, мы изменяем Tekton Trub Europels и Inject Calles The API CONTECOMBI.IO до и после этих конкретных Publy Pack названные шаги.

Примечание: пожалуйста, не забудьте подписаться на Соты Чтобы получить ваш API ключ

Создайте секрет Куберанес

После того, как у нас будет наш ключ API, мы хотим создать секрет Kubernetes, которые требуются для создания вызовов API в нашем трубопроводе. Для этого мы создаем это в jx. и jx постановка пространства имен. Для каждого пространства имен выполняют следующую команду (обязательно измените значение пространства имен по мере необходимости).

>$ kubectl create secret generic honeycomb-creds —from-literal=BUILDEVENT_APIKEY=  --namespace=

Изменить трубопровод Tekton

Теперь, когда у нас есть наш секрет Кубернетика на месте, мы изменим jenkins-x.yaml Файл, который в настоящее время имеет ровно одну строку следующим образом:

buildpack: javascript

Давайте перейдем на важные компоненты файла YAML после модифицированного. Первые предметы, которые я хотел бы выделить, необходимы переменные среды. Нам нужно предоставить соты. 3 ключевые фрагменты информации:

  • CI Provider : Это переменная среды Jenkins-X. Соты добавят дополнительные поля метаданных в наш набор данных
  • Buildevent_dataset : Это указывает, какой набор данных мы хотим заполнить (вы можете иметь много).
  • BuildEvent_Apikey : Секретное значение Kubernetes, которое является ключом API, предоставленным через сайт сотовых продуктов
buildPack: javascript
pipelineConfig:
  env:
  - name: JENKINS-X
    value: JENKINS-X
  - name: BUILDEVENT_DATASET
    value: jx
  - name: BUILDEVENT_APIKEY
    valueFrom:
      secretKeyRef:
        key: BUILDEVENT_APIKEY
        name: honeycomb-creds

Build-Pack Используется для приложения Nodejs — JavaScript как обнаружено на языке. Следовательно, одна строка у нас было как содержание jenkins-x.yaml файл.

Потому что мы знаем, какая сборка Build-Pack используется, мы можем определить, какие именованные шаги существуют. Как правило, они включают Установка NPM и NPM тест Отказ

Поэтому мы хотим ввести метку времени до и после Каждая из этих названных шагов вызывается. Ниже показано, как я впрыскиваю это.

  pipelines:
    overrides:
    - name: npm-install
      pipeline: pullRequest
      stage: build
      steps:
      - command: echo ===== pullrequest:build:before  sending honeycomb step trace  ===============
      - name: honeycomb-npm-install-set-step-start-timestamp
        sh: echo $(date +%s) > step_start
      - name: honeycomb-npm-install-before-timestamp
        sh: echo =================================  $(cat step_start)  =================================
      type: before

    - name: npm-install
      pipeline: pullRequest
      stage: build
      steps:
      - command: echo ===== pullrequest:build:after   sending honeycomb step trace  ===============
      - name: honeycomb-npm-install-after-timestamp
        sh: echo =================================  $(cat step_start)  =================================
      - name: honeycomb-step-log-after-npm-install
        sh: ./buildevents step "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" $(echo npm-install | sum | cut -f 1 -d \ ) $(cat step_start) npm-install
      type: after
    - name: npm-test
      pipeline: pullRequest
      stage: build
      steps:
      - name: honeycomb-npm-test-set-step-start-timestamp
        sh: echo $(date +%s) > step_start
      - name: honeycomb-npm-test-before-timestamp
        sh: echo =================================  $(cat step_start)  =================================
      type: before
    - name: npm-test
      pipeline: pullRequest
      stage: build
      steps:
      - name: honeycomb-npm-test-after-timestamp
        sh: echo =================================  $(cat step_start)  =================================
      - name: honeycomb-step-log-after-npm-test
        sh: ./buildevents step "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" $(echo npm-test | sum | cut -f 1 -d \ ) $(cat step_start) npm-test
      type: after

Теперь, когда я захватил временные метки для этих двух названных шагов, я хочу отправить вызов API в сот следующим образом. Вы заметите, как я использую бинарный файл BuildEvents. Это загружено во время настройки моих трубопроводов, которые я обсуждаю в ближайшее время.

Объединяя несколько частей метаданных, которые существуют как Переменные среды В jenkins x я строю уникальное имя, которое необходимо правильно, чтобы отслеживать вещи.

    - pipeline: pullRequest
      stage: build
      steps:
      - name: honeycomb-build-name-concat
        sh: echo the build is "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" and HONEYCOMB_BUILD_START=$(cat build_start)
      - name: honeycomb-send-success
        sh: ./buildevents build "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" $(cat build_start) success
      type: after

Мы делаем то же самое для Выпуск трубопровод…

# release pipeline releated calls

    - name: npm-install
      pipeline: release
      stage: build
      steps:
      - command: echo ===== release:build:before  sending honeycomb step trace  ===============
      - name: release-honeycomb-npm-install-step-start-timestamp
        sh: echo $(date +%s) > release_step_start
      - name: release-honeycomb-npm-install-before-timestamp
        sh: echo ================================= release  release-npm-install step start  $(cat release_step_start)  =================================
      type: before

    - name: npm-install
      pipeline: release
      stage: build
      steps:
      - name: release-honeycomb-npm-install-after-timestamp
        sh: echo ================================= release npm-install step end  $(cat release_step_start)  =================================
      - name: release-honeycomb-step-log-after-npm-install
        sh: ./buildevents step "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" $(echo release-npm-install | sum | cut -f 1 -d \ ) $(cat release_step_start) release-npm-install
      type: after

    - pipeline: release
      stage: build
      steps:
      - name: release-honeycomb-build-name-concat
        sh: echo the build is "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" and HONEYCOMB_BUILD_START=$(cat release_start)
      - name: release-honeycomb-build-send-success
        sh: ./buildevents build "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" $(cat release_start) success
      type: after

Это часть трубопровода выполняет первое, следовательно, Настройка узел. Есть несколько вещей, которые мы хотим выполнить в настройке наших трубопроводов.

  • Загрузите Build Events Binary, предоставляемые сотами, сделайте его исполняемым
  • Создайте временную метку, мы будем использовать для отслеживания Pulrequest Выполнение трубопровода. Я делаю это, сохранив временный файл с временным метком.

Это сделано для обеих трубопроводов, так как мы работаем с обоими.

    pullRequest:
      setup:
        steps:
          - command: echo =========================== pullrequest:setup downloading Honeycomb.io buildevents binary ===========================
          - name: pullrequest-download-honeycomb-binary
            sh: curl -L -o buildevents https://github.com/honeycombio/buildevents/releases/latest/download/buildevents-linux-amd64
          - name: honeycomb-set-binary-permissions
            sh: chmod 755 buildevents
          - name: honeycomb-display-buildevents-version
            sh: ./buildevents --version
          - name: honeycomb-setup-build-timestamp
            sh: echo $(date +%s) > build_start
          - name: honeycomb-output-debug
            sh: echo the build is "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" and HONEYCOMB_BUILD_START=$(cat build_start)   =======================================================
    release:
      setup:
        steps:
        - command: echo =========================== release:setup downloading Honeycomb.io buildevents binary ===========================
        - name: release-download-honeycomb-binary
          sh: curl -L -o buildevents https://github.com/honeycombio/buildevents/releases/latest/download/buildevents-linux-amd64
        - name: release-honeycomb-set-binary-permissions
          sh: chmod 755 buildevents
        - name: release-honeycomb-setup-build-timestamp
          sh: echo $(date +%s) > release_start
        - name: release-honeycomb-output-debug
          sh: echo the build is "${APP_NAME}-${PULL_NUMBER}-${VERSION}-${BUILD_NUMBER}" and HONEYCOMB_BUILD_START=$(cat release_start)   =======================================================

После того, как этот трубопровод выполняется, приборная панель на сайте GoneComb.io покажет нам прослеживание выполнения следующим образом.

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

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

Jenkins World |. DevOps World 2019.

Я буду демонстрировать это решение в разное время, находясь на конференции в этом году. Вы все еще можете зарегистрироваться и получить большую скидку с помощью Code: Предварительный просмотр Отказ Вместо того, чтобы ваша стоимость составляет 1499 долларов, со скидкой всего 799 долларов

Вы можете найти мое полное расписание на Официальный сайт

Ура, @SharepointoChar.

Оригинал: «https://dev.to/devopsoscar/increasing-ci-cd-pipeline-observability-in-jenkins-x-5e0i»