74. Hello World - Jenkinsfile App Pipeline

Обновлено: 2024-03-12
3 мин

Здравствуй мир - Jenkinsfile App Pipeline

В предыдущем разделе мы построили простой конвейер в Jenkins, который будет перемещать наш образ докера из нашего dockerfile в публичном репозитории GitHub в наш частный репозиторий Dockerhub.

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

Цель

  • Dockerfile (Hello World)
  • Jenkinsfile
  • Jenkins Pipeline для запуска при обновлении репозитория GitHub
  • Используйте репозиторий GitHub в качестве источника.
  • Запуск - Clone/Get Repository, Build, Test, Deploy Stages
  • Развертывание на DockerHub с инкрементными номерами версий
  • Stretch Goal для развертывания на нашем кластере Kubernetes (для этого потребуется еще одно задание и репозиторий манифеста с использованием учетных данных GitHub).

Шаг первый

У нас есть наш GitHub репозиторий В настоящее время он содержит наш Dockerfile и наш index.html

Это то, что мы использовали в качестве источника в нашем конвейере, теперь мы хотим добавить этот скрипт Jenkins Pipeline в наш репозиторий GitHub.

Теперь вернемся к нашей приборной панели Jenkins и создадим новый пайплайн, но теперь вместо вставки нашего скрипта мы будем использовать “Pipeline script from SCM” Мы будем использовать приведенные ниже параметры конфигурации.

Для справки мы будем использовать https://github.com/MichaelCade/Jenkins-HelloWorld.git в качестве URL репозитория.

На этом этапе мы можем нажать кнопку сохранить и применить, после чего мы сможем вручную запустить наш Pipeline для сборки нового образа Docker, загруженного в наш репозиторий DockerHub.

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

Это важный момент, потому что если вы используете дорогостоящие облачные ресурсы для хранения конвейера и у вас много изменений в репозитории кода, то вы понесете большие расходы. Мы знаем, что это демонстрационная среда, поэтому я использую опцию “poll scm”. (Также я считаю, что при использовании minikube мне не хватает возможности использовать webhooks)

Одна вещь, которую я изменил со вчерашней сессии, это то, что теперь я хочу загружать изображение в публичный репозиторий, который в данном случае будет michaelcade1\90DaysOfDevOps, мой Jenkinsfile уже содержит это изменение. И из предыдущих разделов я удалил все существующие образы демо-контейнеров.

Двигаясь назад, мы создали наш Pipeline, а затем, как было показано ранее, добавили нашу конфигурацию.

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

Теперь нажмем кнопку “Build Now”. и в представлении этапа будут отображены наши этапы.

Если мы перейдем к нашему репозиторию DockerHub, у нас должно быть 2 новых образа Docker. У нас должен быть идентификатор сборки 1 и последняя версия, потому что каждая сборка, которую мы создаем на основе команды “Upload to DockerHub”, отправляет версию, используя переменную окружения Jenkins Build_ID, а также выпускает последнюю версию.

Давайте создадим обновление файла index.html в нашем репозитории GitHub, как показано ниже, я позволю вам пойти и узнать, что говорила версия 1 файла index.html.

Если мы вернемся в Jenkins и снова выберем “Build Now”. Мы увидим, что наша сборка #2 прошла успешно.

Затем быстро взглянув на DockerHub, мы увидим, что у нас есть наш тег версии 2 и наш последний тег.

Здесь стоит отметить, что я добавил в свой кластер Kubernetes секрет, который позволяет мне получить доступ и аутентификацию для отправки моих сборок docker в DockerHub. Если вы следуете этому примеру, вам следует повторить этот процесс для своей учетной записи, а также внести изменения в Jenkinsfile, связанный с моим репозиторием и учетной записью.

Ресурсы