Сборка Java pipeline с использованием шаблона
Этот pipeline предназначен для автоматизации полного CI/CD workflow для Java-приложений. Он переиспользуемый и гибкий, поддерживает пользовательские параметры сборки, несколько workspace и условное выполнение шагов.
Ключевые возможности:
- ✅ Гибкий источник кода
- ⚙️ Настраиваемые параметры Maven
- 🚀 Поддержка кэширования локального репозитория Maven
- 🔌 Подключаемые задачи через params
- 🛠️ Динамическая сборка и push образов
- ☁️ Обновление образа workload через kubectl
Содержание
Указание через hub resolversПараметрыКлонирование GitMavenСканер SonarQubeСборка образовСканер TrivyРазвертывание или обновление workloadWorkspaceПлатформыИспользованиеМинимальная настройка: запуск end-to-end с минимальным набором параметровИспользование Maven Settings.xmlИспользование build cache для ускорения CIКонфигурация свойств SonarQubeРазвертывание или обновление workloadПропуск задач с помощью ParamsПолный пример со всеми задачамиУказание через hub resolvers
В следующем примере PipelineRun ссылается на pipeline из catalog:
Параметры
Клонирование Git
-
git-url
- type: string
- default:
"" - description: URL репозитория для клонирования.
-
git-revision
- type: string
- default:
"" - description: Ревизия для checkout (branch, tag, sha, ref и т. д.).
-
skip-git-clone
- type: string
- default:
"false" - description: Пропустить выполнение задачи git clone. Ее можно включить только если соответствующий репозиторий кода уже существует в workspace.
-
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
-
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. Дополнительные сведения см. в разделе Конфигурация свойств SonarQube.
Сборка образов
-
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 при сборке образов. ВНИМАНИЕ — их необходимо санитизировать, чтобы избежать внедрения команд (например,
--build-arg key=value --label key=value).
-
build-args
- type: array
- default: [""]
- description: Указывает build argument и его значение, которые будут интерполироваться в инструкциях, прочитанных из 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
-
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: Namespace workload для развертывания или обновления. Если не указан, будет использован namespace текущего 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".
Workspace
- source: Workspace для обмена информацией между задачами.
- git-basic-auth: Необязательный workspace, содержащий файлы .gitconfig и .git-credentials. Они будут скопированы в домашний каталог пользователя до выполнения любых git-команд. Любые другие файлы в этом workspace игнорируются. По возможности настоятельно рекомендуется использовать ssh-directory вместо basic-auth и привязывать Secret к этому workspace вместо других типов volume.
- git-ssh-directory: Необязательный workspace с private key, known_hosts, config и т. д. Копируется в домашний каталог пользователя перед выполнением git-команд. Используется для аутентификации на git remote при выполнении clone. Настоятельно рекомендуется привязывать Secret к этому workspace вместо других типов volume.
- git-ssl-ca-directory: Необязательный workspace, содержащий CA certificates; он будет использоваться Git для проверки peer при fetch или push через HTTPS.
- maven-settings: Необязательный workspace, содержащий пользовательские настройки Maven.
- maven-local-repo: Необязательный workspace для локального репозитория Maven.
- maven-server-secret: Необязательный workspace, содержащий server credentials.
- maven-trust-store: Необязательный workspace, содержащий JKS truststore для private CA, используемых Maven.
- sonar-settings: Необязательный workspace, в который можно смонтировать свойства SonarQube.
- sonar-credentials: Необязательный workspace, содержащий учетные данные для использования в SonarQube.
- registryconfig: Необязательный workspace для файлов конфигурации distribution registry, таких как
config.jsonили.dockerconfigjson. Он необязателен и используется для аутентификации при push образов в registry. - kubeconfig: Необязательный workspace, содержащий файл kubeconfig. Имя kubeconfig должно быть
kubeconfig. Если в этом workspace нет kubeconfig, workspace будет проигнорирован.
Платформы
Эту Task можно запускать на платформах linux/amd64 и linux/arm64.
Использование
Минимальная настройка: запуск end-to-end с минимальным набором параметров
Необязательные задачи (sonarqube-scanner, deploy-or-upgrade и т. д.) будут корректно пропущены, если не заданы или опущены.
Использование Maven Settings.xml
Вы можете смонтировать workspace maven-settings, чтобы применить settings.xml для сборок Maven.
Также можно использовать параметр maven-mirror-url для задания зеркала репозитория Maven. Он будет использован как <mirror> в settings.xml.
Использование build cache для ускорения CI
Подключите постоянный workspace maven-local-repo, чтобы кэшировать содержимое .m2/repository между запусками pipeline.
Повторное использование зависимостей может значительно сократить время разрешения зависимостей Maven и существенно уменьшить время сборки между запусками.
Конфигурация свойств SonarQube
Вы можете смонтировать workspace sonar-settings или использовать параметр sonar-properties, чтобы задать свойства для файла sonar-project.properties.
Свойства по умолчанию: sonar.sources=., sonar.java.binaries=target/classes.
Подробнее об использовании свойств SonarQube см. в analysis parameters и в свойствах для Java
Ниже приведены некоторые свойства, которые можно задать:
Развертывание или обновление workload
Вы можете развернуть или обновить workload, используя образ, созданный задачей build-image в этом pipeline.
Задав параметр 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. Если новый образ размещен в другом registry, убедитесь, что создали и настроили соответствующий pull secret для workload.
Пропуск задач с помощью Params
Pipeline поддерживает пропуск задач с помощью params:
Полный пример со всеми задачами
В этом примере показано, как использовать все задачи в pipeline. Он включает следующие задачи:
- Клонирование исходного кода
- Сборка кода с помощью Maven
- Сборка образа и push образа в registry
- Сканирование образа с помощью Trivy
- Сканирование кода с помощью SonarQube
- Развертывание или обновление workload