Создание Java конвейера с использованием шаблона
Этот конвейер предназначен для автоматизации полного CI/CD процесса для Java-приложений.
Он многоразовый и гибкий, поддерживает пользовательские аргументы сборки, несколько рабочих областей и условное выполнение шагов.
Основные возможности:
- ✅ Гибкий источник кода
- ⚙️ Настраиваемые параметры Maven
- 🚀 Поддержка кэширования локального репозитория Maven
- 🔌 Подключаемые задачи через параметры
- 🛠️ Динамическая сборка и публикация образов
- ☁️ Обновление образа workload через kubectl
Содержание
Указание с помощью hub resolversПараметрыGit CloneMavenSonarQube ScannerСборка образовTrivy ScannerРазвёртывание или обновление workloadРабочие областиПлатформыИспользованиеМинимальная настройка: запуск end-to-end с минимальными параметрамиИспользование Maven Settings.xmlИспользование кэша сборки для ускорения CIКонфигурация свойств SonarQubeРазвёртывание или обновление workloadПропуск задач с помощью параметровПолный пример со всеми задачамиУказание с помощью hub resolvers
Следующий пример запуска PipelineRun ссылается на pipeline из каталога:
Параметры
Git Clone
-
git-url
- type: string
- default:
"" - description: URL репозитория для клонирования.
-
git-revision
- type: string
- default:
"" - description: Ревизия для checkout (ветка, тег, sha, ref и т.д.).
-
skip-git-clone
- type: string
- default:
"false" - description: Пропустить выполнение задачи git clone. Может быть включено только если соответствующий репозиторий уже существует в рабочей области.
-
git-crt-file-name
- type: string
- default:
"ca-bundle.crt" - description: Имя файла crt, смонтированного через workspace ssl-ca-directory. Значение по умолчанию — ca-bundle.crt.
Maven
-
maven-subdirectory
- type: string
- default:
. - description: Контекстный каталог для Maven проекта.
-
maven-goals
- type: array
- default:
["package"] - description: Цели Maven для выполнения.
-
maven-mirror-url
- type: string
- default:
"" - description: URL зеркала Maven репозитория.
SonarQube Scanner
-
sonar-url
- type: string
- default:
"" - description: URL вашего экземпляра SonarQube Server. Если не указан, задача sonarqube scanner будет пропущена.
-
sonar-project-key
- type: string
- default:
"" - description: Уникальный ключ проекта SonarQube.
-
sonar-properties
- type: array
- default:
["sonar.sources=.", "sonar.java.binaries=target/classes"] - description: Дополнительные свойства для передачи SonarQube. Подробнее см. Configuration of SonarQube properties.
Сборка образов
-
images
- type: array
- description: Ссылки на образы, которые будет создавать buildah. Может содержать несколько адресов образов, разделённых запятыми. Например:
- busybox:latest
- busybox:v1 .30.1
-
containerfile-path
- type: string
- default: ./Containerfile
- description: Путь к Containerfile для сборки.
-
build-extra-args
- type: string
- default: ""
- description: Дополнительные параметры для команды сборки при создании образов. ВНИМАНИЕ — необходимо очищать для предотвращения инъекций команд (например, --build-arg key=value --label key=value).
-
build-args
- type: array
- default: [""]
- description: Указывает аргумент сборки и его значение, которые будут интерполированы в инструкциях из Containerfile так же, как переменные окружения, но не будут добавлены в список переменных окружения в конфигурации итогового образа. Например, HTTP_PROXY=http://10.10.10.10:8080
-
build-context
- type: string
- default: .
- description: Путь к каталогу, используемому как контекст.
-
push-extra-args
- type: string
- default: ""
- description: Дополнительные параметры для команды push при публикации образов. ВНИМАНИЕ — необходимо очищать для предотвращения инъекций команд (например, --creds=username:password ).
Trivy Scanner
-
skip-trivy-scan
- type: string
- default: "false"
- description: Установите, чтобы пропустить сканирование образа trivy после сборки.
-
trivy-extra-args
- type: string
- default: ""
- description: Дополнительные параметры для команды trivy при сканировании образов. ВНИМАНИЕ — необходимо очищать для предотвращения инъекций команд (например, --insecure). Можно использовать
--skip-db-updateи--skip-java-db-updateдля пропуска обновления базы уязвимостей.
Развёртывание или обновление workload
-
workload-name
- type: string
- default: ""
- description: Имя workload для развёртывания или обновления. Если не указано, задача
deploy-or-upgradeбудет пропущена.
-
workload-kind
- type: string
- default: Deployment
- description: Тип workload для развёртывания или обновления, например Deployment, StatefulSet и т.д.
-
workload-namespace
- type: string
- default: ""
- description: Пространство имён workload для развёртывания или обновления. Если не указано, будет использовано пространство имён текущего TaskRun.
-
workload-container
- type: string
- default: []
- description: Параметр для указания контейнеров внутри workload, у которых нужно обновить образ. По умолчанию обновляются образы всех контейнеров workload.
-
workload-rollout-timeout
- type: string
- default: "0"
- description: Время ожидания готовности workload перед завершением ожидания,
0означает никогда не прерывать. Другие значения должны содержать единицу времени (например, 1s, 2m, 3h).
-
workload-manifests-dir
- type: string
- default: ""
- description: Манифесты workload для развёртывания. Если не указано, будет обновлён только образ workload, уже существующего в кластере. Можно использовать относительный путь к каталогу манифестов в workspace
source. Например: "manifests".
Рабочие области
- source: Рабочая область для обмена информацией между задачами.
- git-basic-auth: необязательная рабочая область, содержащая файлы .gitconfig и .git-credentials. Они копируются в домашний каталог пользователя перед выполнением git-команд. Другие файлы в этой рабочей области игнорируются. Рекомендуется использовать
ssh-directoryвместоbasic-authи связывать Secret с этой рабочей областью вместо других типов томов. - git-ssh-directory: необязательная рабочая область с приватным ключом, known_hosts, config и т.д. Копируется в домашний каталог пользователя перед выполнением git-команд. Используется для аутентификации с удалённым git при клонировании. Рекомендуется связывать Secret с этой рабочей областью вместо других типов томов.
- git-ssl-ca-directory: необязательная рабочая область, содержащая CA сертификаты, которые Git использует для проверки сервера при работе по HTTPS.
- maven-settings: необязательная рабочая область с пользовательскими настройками Maven.
- maven-local-repo: необязательная рабочая область для локального репозитория Maven.
- maven-server-secret: необязательная рабочая область с учётными данными сервера.
- maven-trust-store: необязательная рабочая область с JKS truststore для приватных CA, используемых Maven.
- sonar-settings: необязательная рабочая область, куда можно монтировать свойства SonarQube.
- sonar-credentials: необязательная рабочая область с учётными данными для использования в SonarQube.
- registryconfig: необязательная рабочая область для конфигурационных файлов реестра дистрибуции, таких как
config.jsonили.dockerconfigjson. Используется для аутентификации при публикации образов в реестр. - kubeconfig: необязательная рабочая область с файлом kubeconfig. Имя файла должно быть
kubeconfig. Если в этой рабочей области нет kubeconfig, она игнорируется.
Платформы
Задача может выполняться на платформах linux/amd64 и linux/arm64.
Использование
Минимальная настройка: запуск end-to-end с минимальными параметрами
Необязательные задачи (sonarqube-scanner, deploy-or-upgrade и др.) будут корректно пропущены, если не заданы или опущены.
Использование Maven Settings.xml
Вы можете смонтировать рабочую область maven-settings для применения settings.xml при сборках Maven.
Также можно использовать параметр maven-mirror-url для указания зеркала Maven репозитория. Он будет использован как <mirror> в settings.xml.
Использование кэша сборки для ускорения CI
Подключите постоянную рабочую область maven-local-repo для кэширования содержимого .m2/repository между запусками конвейера.
Повторное использование зависимостей значительно сокращает время разрешения зависимостей Maven и уменьшает время сборки между запусками.
Конфигурация свойств SonarQube
Вы можете смонтировать рабочую область sonar-settings или использовать параметр sonar-properties для применения свойств в файле sonar-project.properties.
Свойства по умолчанию: sonar.sources=., sonar.java.binaries=target/classes.
Использование свойств SonarQube описано в analysis parameters и свойства для Java.
Некоторые из свойств, которые можно задать:
Развёртывание или обновление workload
Вы можете развернуть или обновить workload, используя образ, собранный задачей build-image в этом конвейере.
Указав параметр workload-manifests-dir, вы можете применить Kubernetes манифесты из указанного каталога для создания или обновления workload.
Поддерживаются форматы JSON и YAML. Все манифесты в указанном каталоге будут обработаны с помощью kubectl apply. Обратите внимание, что kubectl apply не обходит подкаталоги.
Если в каталоге есть файл конфигурации Kustomize (например, kustomization.yaml, kustomization.yml или Kustomization), он будет обработан с помощью kubectl kustomize.
Пример структуры каталога workload-manifests-dir:
Вы можете настроить следующие параметры:
Если вы не хотите разворачивать workload с помощью манифестов, просто оставьте параметр workload-manifests-dir пустым. В этом случае задача обновит только образ существующего workload в кластере.
Необходимо самостоятельно управлять секретами для доступа к образам (image pull secrets) для workload. Если новый образ размещён в другом реестре, убедитесь, что создан и настроен соответствующий pull secret для workload.
Пропуск задач с помощью параметров
Конвейер поддерживает пропуск задач с помощью параметров:
Полный пример со всеми задачами
Этот пример демонстрирует использование всех задач в конвейере. Включает следующие задачи:
- Клонирование исходного кода
- Сборка кода с помощью Maven
- Сборка образа и публикация его в реестр
- Сканирование образа с помощью Trivy
- Сканирование кода с помощью SonarQube
- Развёртывание или обновление workload