74. Hello World - Jenkinsfile App Pipeline
Содержание
Здравствуй мир - 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, связанный с моим репозиторием и учетной записью.