Рубрики
Uncategorized

Как использовать общие библиотеки в трубопроводе Дженкинса?

По мере того, как Agile Methogology выбирает темп, инструменты, которые позволяют более быстрое время для доставки программного обеспечения, получили больше PREMINENC … Tagged с DevOps, CICD, Jenkins, Integration.

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

Для начинающих на Дженкинсе я бы порекомендовал прочитать нашу статью Лучший учебник Jenkins Pipeline Для начинающих, прежде чем продолжать читать этот учебник по общему делу Jenkins Cipeline Shale.

Jenkinsfile

В мире Дженкинса трубопровод — это самая маленькая единица, с которой каждый пользователь Дженкинса взаимодействует. Трубопровод Jenkins может быть определена либо с помощью Jenkinsfile, либо GUI (графический пользовательский интерфейс). Мы рекомендуем Jenkinsfile над GUI, поскольку GUI может оказаться неэффективным для сложных требований.

Jenkinsfile — это просто текстовый файл, в котором мы пишем код трубопровода для определения трубопровода Jenkins. Его можно проверить в управление источником, как GIT вместе с исходным кодом нашего проекта. В большинстве случаев в каждом приложении будет свой собственный Jenkinsfile для строительства, тестирования и развертывания

Есть два способа написания Jenkinsfile — один называется сценаристом, где синтаксис для трубопровода строго отличается. Другой — это относительно новый способ написания Jenkinsfile под названием декларативный трубопровод.

Для начинающих,

  • Если Jenkinsfile начинается с словесного узла, то это сценарий.
  • Если Jenkinsfile начинается со слова Pipeline, то это декларативный трубопровод.

Мы бы порекомендовали использовать декларативный трубопровод, так как он предлагает больше преимуществ по сравнению с сценарием.

Дженкинс поделился библиотекой

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

Зачем пользоваться библиотекой Дженкинса?

Допустим, у нас есть пять различных приложений для Spring Boot в нашей архитектуре микросервиса. Все они должны быть построены с использованием Maven, запустить блок и интеграционные тесты, чтобы обеспечить целостность кода, упакованную в виде файла JAR/WAR и выдвинутого к артефактору.

Как правило, все пять приложений нуждаются в своем собственном Jenkinsfile, но содержание Jenkinsfiles будет в основном одинаковым. Библиотека Jenkins Shared избегает этого повторения кода трубопровода, создав общую библиотеку.

Короче говоря, вот шаги для создания и использования библиотеки общего Jenkins:

  • Создайте отдельный репо Git для библиотеки трубопроводов Jenkins и подтолкните общий код библиотеки в этот репо.
  • Интегрируйте репо общую библиотеку в Дженкинс в разделе «Управление Дженкинсом».
  • Создайте Jenkinsfile в проекте. В этом Jenkinsfile импортируйте и используйте общую библиотеку.

Создание библиотеки Дженкинса

Общие библиотеки Дженкинса обычно подталкиваются в отдельный репозиторий GIT и проверяются Jenkins Job во время работы.

Шаги по созданию библиотеки Дженкинса общей библиотеки:

Шаг 1: Создавать Папка VARS

Создайте отдельный каталог проекта. Внутри каталога проекта создайте каталог с именем VARS, который будет размещать исходный код общей библиотеки (обычно в файлах с расширением .groovy)

Шаг 2: Создайте Groovy File

vars 
| --- welcomeJob.groovy

Шаг 3: Создать функцию call () внутри Groovy File

Когда общая библиотека упоминается с задания Дженкинса, Дженкинс по умолчанию вызовет функцию Call () в нашем Groovy File. Рассмотрим функцию Call () как метод main () в Java. Мы также можем указать параметры для функции Call (), если хотим.

def call(String name = 'User') {
        echo "Welcome, ${name}."
}

В приведенном выше примере имя является параметром. Значение по умолчанию «Пользователь» будет назначен имени в случае, если параметр не будет передан Jenkinsfile.

Теперь совершите и протолкните содержимое папки VARS в удаленный репозиторий GIT.

Настройте общую библиотеку в Дженкинсе

Теперь пришло время настроить общую библиотеку в Дженкинсе.

Шаги по настройке библиотеки трубопроводов Jenkins:

Шаг 1: Open Дженкинс в вашем браузере. (Если локальный, http://localhost: 8080/ )

Шаг 2: Нажмите на Управление Дженкинсом в левой стороне меню.

Шаг 3: Нажмите на Настройка системы Анкет Прокрутите вниз, пока не найдете Глобальные библиотеки трубопровода раздел.

Шаг 4: Под Библиотека Раздел, настройте значения, как ниже.

  • Имя (помните, мы будем ссылаться на эту общую библиотеку из Jenkinsfile, используя это имя).
  • Версия по умолчанию (имя филиала нашей общей библиотеки GIT Repo).
  • Под методом поиска выберите Modern SCM.
  • Под управлением исходным кодом выберите GIT.
    • Введите URL -адрес в соответствии с репозиторием проекта в соответствии с репозиторием проекта
    • Настройте учетные данные, если ваш репо требует учетных данных для проверки кода

Шаг 5: Нажмите на Сохранить кнопка.

Пример конфигурации для глобальных библиотек трубопроводов

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

Ссылаясь на общую библиотеку Дженкинса из трубопровода

Теперь давайте обратимся к библиотеке Дженкинса общей библиотеки из трубопровода.

Шаги по направлению к библиотеке трубопроводов Дженкинса:

Шаг 1: В Дженкинсе нажмите на Новый элемент В левом меню введите имя Дженкинса и выберите трубопровод как стиль и нажмите на ОК кнопка.

Шаг 2: Внутри работы прокрутите вниз до трубопровод раздел. Здесь нам нужен наш Jenkinsfile, который относится к общей библиотеке. Загрузка Jenkinsfile в Jenkins Job может быть выполнена с помощью двух подходов.

Подход 1: Jenkinsfile — Ручной подход (не предпочтительнее производства)

  1. Под трубопровод Раздел, вы можете увидеть Скрипт Текстовое поле, где мы можем вручную скопировать, вставить содержимое нашего Jenkinsfile.
// Jenkinsfile
@Library('first-shared-lib') _
welcomeJob 'lambdatest'

Примечание: _ (подчеркивается) является обязательным после аннотации @Library.

@Library Будет импортировать общую библиотеку на нашу работу в Дженкинсе. (Помните Первый Shared-Lib -это имя, которое мы дали при настройке общих библиотек в управлении Дженкинсом. Обратитесь к предыдущему разделу этой статьи).

Добро пожаловать вызовет call () функция в Welcomejob.groovy Создан под vars папка. Строка «rambdatest» будет отправлена в качестве параметра функции Call ().

  1. Нажмите на Сохранить кнопка.

Подход 2: Jenkinsfile — см. Из репозитория GIT (предпочтительный подход)

Вместо того, чтобы вручную копировать контент Jenkinsfile, мы можем обратиться к Jenkinsfile, совершенному в Git Repo.

Шаг 1: В работе Дженкинса, под трубопровод Раздел, выберите Скрипт трубопровода от SCM для Определение Анкет Настройте URL и учетные данные GIT Repo в случае, если репо нуждается в аутентификации для проверки кода.

Шаг 2: Нажмите на Сохранить кнопка.

Мы рекомендуем подход 2 загрузить Jenkinsfile на работу Jenkins.

Шаг 3: Нажмите на Строить сейчас Кнопка в левой стороне меню, чтобы вызвать сборку.

Шаг 4: Как только сборка завершена, проверьте журналы, нажав на Консоль вывод из левой стороны меню.

Вы должны увидеть приветственное, Lambdatest Message на выводе консоли.

Таким образом, мы успешно создали и использовали библиотеку Дженкинса, которая печатает приветственное сообщение. Но каково реальное использование этой функции библиотеки трубопроводов Jenkins? Конечно, это не создано только для печати приветственных сообщений.

Дженкинс Общая библиотека с приложением Java/Spring Boot

Давайте возьмем пример, который мы обсуждали ранее в этой статье — архитектура Microservices с пятью приложениями Spring Boot, причем каждый из них имеет свой Jenkinsfile.

Вот образец Jenkinsfile, чтобы построить, тестировать и упаковать приложение для Spring Boot:

pipeline {
       agent any
       tools {
           maven 'Maven 3.5.0'
           jdk 'jdk8'
       }
       stages {
           stage("Tools initialization") {
               steps {
                   sh "mvn --version"
                   sh "java -version"
               }
           }
           stage("Checkout Code") {
               steps {
                   git branch: 'master',
                       url: "https://github.com/iamvickyav/spring-boot-data-H2-embedded.git"
               }
           }
           stage("Cleaning workspace") {
               steps {
                   sh "mvn clean"
               }
           }
           stage("Running Testcase") {
              steps {
                   sh "mvn test"
               }
           }
           stage("Packing Application") {
               steps {
                   sh "mvn package -DskipTests"
               }
           }
       }

Вкратце, приведенный выше код трубопровода сначала загрузит инструменты, такие как Java & Maven, затем код выбора от Git Repo, очистите рабочее пространство, затем запустите тестовый пример и, наконец, упаковывает приложение в качестве банки.

Если вы заметили, кроме URL -адреса GIT Repo, остальные шаги применимы для любого приложения Spring Boot. Вместо того, чтобы создавать пять различных Jenkinsfiles, давайте создадим одну библиотеку трубопроводов Jenkins и поделимся ее во всех приложениях Spring Boot.

Перемещение общих шагов трубопровода в библиотеку Дженкинса

Давайте создадим новую общую библиотеку под названием Jenkinsforjava Создавая jenkinsforjava.grovy в каталоге VARS.

vars
| --- welcomeJob.groovy
| --- jenkinsForJava.groovy

// jenkinsForJava.groovy
def call(String repoUrl) {
  pipeline {
       agent any
       tools {
           maven 'Maven 3.5.0'
           jdk 'jdk8'
       }
       stages {
           stage("Tools initialization") {
               steps {
                   sh "mvn --version"
                   sh "java -version"
               }
           }
           stage("Checkout Code") {
               steps {
                   git branch: 'master',
                       url: "${repoUrl}"
               }
           }
           stage("Cleaning workspace") {
               steps {
                   sh "mvn clean"
               }
           }
           stage("Running Testcase") {
              steps {
                   sh "mvn test"
               }
           }
           stage("Packing Application") {
               steps {
                   sh "mvn package -DskipTests"
               }
           }
       }
   }
}

Мы перенесли нашу логику трубопровода в метод Call () в Jenkinsforjava.grovy. Вместо жесткого кодирования репурл мы сделали его динамичной, приняв URL -адрес из параметра функции Call ().

Теперь посвятите и протолкните Vars/Jenkins для файла Java.grovy.

Обновите Jenkinsfile в Spring Boot Application, чтобы использовать общую библиотеку

Давайте обновим, что Jenkinsfile, присутствующий в корневом каталоге проекта Spring Boot со следующим контентом:

@Library('first-shared-lib') _
jenkinsForJava 'https://github.com/iamvickyav/spring-boot-data-H2-embedded.git'

Поскольку функция Call () в Jenkinsforjava.grovy требует URL -адреса GIT, мы передали его в качестве параметра здесь.

_ Примечание: Ссылаясь на общую библиотеку Jenkinsforjava, Jenkinsfile во всех наших приложениях Spring Boot сократилась до двух строк — одна для @Library Import, а другая для вызова общей библиотеки Jenkinsforjava. _

Теперь совершите и подтолкните изменения в Jenkinsfile в удаленное репо.

Создайте новую работу для приложения Spring Boot, следующие шаги, упомянутые в подходе 2 — Jenkinsfile — см.

Обратитесь к снижению экрана ниже для окончательного состояния работы

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

Доступ к Lambdatest из библиотеки Jenkins Shared

Давайте рассмотрим следующий проект Maven, который содержит тестовые примеры селена для проверки Образец приложения для дела Анкет

src/test/java/com/lambdatest/lambdatest.java

package com.lambdatest

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class LambdaTest {

   public RemoteWebDriver driver = null;
   String username = "";
   String accessKey = "";

   @BeforeTest
   public void setUp() throws Exception {
       DesiredCapabilities capabilities = new DesiredCapabilities();
       capabilities.setCapability("platform", "Windows 10");
       capabilities.setCapability("browserName", "Chrome");
       capabilities.setCapability("version", "87.0");
       capabilities.setCapability("resolution","1024x768");
       capabilities.setCapability("build", "First Test");
       capabilities.setCapability("name", "Sample Test");
       capabilities.setCapability("network", true);       capabilities.setCapability("visual", true);        capabilities.setCapability("video", true);        capabilities.setCapability("console", true);
       try {
           username = System.getProperty("username");
           accessKey = System.getProperty("accessKey");
           driver= new RemoteWebDriver(new URL("https://"+username+":"+accessKey+"@hub.lambdatest.com/wd/hub"), capabilities);
       } catch (MalformedURLException e) {
           System.out.println("Invalid grid URL");
       }
   }

   @Test(enabled = true)
   public void testScript() throws Exception {
       try {
           driver.get("https://lambdatest.github.io/sample-todo-app/");
           driver.findElement(By.name("li1")).click();
           driver.findElement(By.name("li2")).click();
           driver.findElement(By.id("sampletodotext")).clear();
           driver.findElement(By.id("sampletodotext")).sendKeys("Yey, Let's add it to list");
           driver.findElement(By.id("addbutton")).click();
           driver.quit();
       } catch (Exception e) {
           System.out.println(e.getMessage());
       }
   }
}

Мы хотим запустить этот тест в облаке LambDatest. Следовательно, мы настроили Remotewebdriver с URL:

https://"+username+":"+accessKey+"@hub.lambdatest.com/wd/hub

_ Примечание: Зарегистрируйтесь на https://www.lambdatest.com/ Чтобы получить свое имя пользователя и AccessKey. _

Запуск теста в LambDatest Cloud из локального

Чтобы выполнить тест в LambDatest Cloud из вашего локального, используйте следующую команду:

> mvn -dusername = -daccesskey = тест

Запуск теста в Lambdatest Cloud от Jenkins

Вам нужно создать rambdatest учетные данные на сервере Jenkins:

  1. Откройте Jenkins URL ( http://localhost: 8080 если локальный) и нажмите «Управление Дженкинсом» в левой стороне меню.
  2. Нажмите на управление учетными данными.
  1. Введите в раздел глобальных учетных данных и нажмите «Добавить учетные данные».
  1. Настройте имя пользователя и пароль с помощью имени пользователя и AccessKey, взятого с LambDatest Sate, соответственно. Добавить учетные данные должны выглядеть как что -то ниже:

Создайте Jenkinssharedlibrary, чтобы запустить тестовый пример на Lambdatest Cloud

  1. Создать jenkinslambdatest.groovy в папке VARS
vars
| --- welcomeJob.groovy
| --- jenkinsForJava.groovy
| --- jenkinsLambdaTest.groovy

def call(String repoUrl) {
   pipeline{
       agent any
       tools {
           maven 'Maven 3.5.0'
           jdk 'jdk8'
       }
       environment {
           LAMBDA_TEST_CRED = credentials('lambdatest-site-cred')
       }
       stages {
           stage("Tools initialization") {
               steps {
                       sh "mvn --version"
                       sh "java -version"
                   }
               }
           stage("Checkout Code") {
               steps {
                   git branch: 'main',
                   url: "${repoUrl}"
               }
           }
           stage("Running Testcase") {
               steps {
                   sh "mvn -Dusername=${LAMBDA_TEST_CRED_USR} -DaccessKey=${LAMBDA_TEST_CRED_PSW} test"
               }
           }
       }
   }
}
  1. Мы использовали блок среды в коде трубопровода для загрузки учетных данных, которые мы создали в разделе «Управление учетными данными».
environment {
                LAMBDA_TEST_CRED = credentials('lambdatest-site-cred')
        }
  1. Вся учетные данные загружаются в переменную лямбда_test_cred.

_USR Прилагается с Lambda_test_cred Чтобы получить доступ к имени пользователя и _Psw Прилагается с Lambda_test_cred Чтобы получить доступ к паролю (AccessKey для лямбчатого портала).

  1. Итак, наша последняя команда тестирования MVN выглядит ниже:
mvn -Dusername=${LAMBDA_TEST_CRED_USR} -DaccessKey=${LAMBDA_TEST_CRED_PSW} test

Создайте Jenkinsfile, чтобы использовать общую библиотеку Дженкинса

  1. Создать Jenkinsfile В исходном коде репо со следующим контентом
@Library('first-shared-lib') _
jenkinsLambdaTest 'https://github.com/iamvickyav/lambdatest-sample-repo.git'
  1. Теперь создайте новую работу в Jenkins с трубопроводом в качестве типа задания и настройте раздел трубопровода для обозначения репо Github.
  1. Нажмите на Сохранить Кнопка и запустить работу, нажав Строить сейчас Ссылка из левой стороны меню. Вы должны увидеть прогресс теста в Jenkins Сценический вид Анкет
  1. Вы также должны увидеть отчет о тестировании в Lambdatest Cloud.

Завершая

Подводя итог, в этом учебном пособии по общим библиотеке Jenkins мы обсудили, что такое библиотека Jenkins Shared, когда и как мы можем ее использовать. Создание рабочих мест Jenkins с использованием графического интерфейса — подходящее место для начала изучения Дженкинса. Но это просто шаги ребенка. Мы не должны полагаться на графический интерфейс, чтобы создать нашу работу, связанную с проектом, мы должны использовать Jenkinsfile для создания нашей работы. Но также важно научиться эффективно использовать Jenkinsfile. Библиотека Дженкинса — это всего лишь первый шаг в этом направлении.

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

Оригинал: «https://dev.to/aboywithscar/how-to-use-shared-libraries-in-a-jenkins-pipeline-4e7»