使用模板构建 Java pipeline
此 pipeline 旨在自动化 Java 应用的完整 CI/CD 工作流。 它具有可复用性和灵活性,支持自定义构建参数、多个工作区以及有条件地执行步骤。
主要功能:
- ✅ 灵活的代码源
- ⚙️ 可自定义的 Maven 设置
- 🚀 支持 Maven 本地仓库缓存
- 🔌 通过 params 插入任务
- 🛠️ 动态构建和推送镜像
- ☁️ 使用 kubectl 更新工作负载镜像
目录
使用 hub resolvers 指定参数Git CloneMavenSonarQube Scanner构建镜像Trivy Scanner部署或升级工作负载工作区平台使用最小设置:使用最少参数端到端运行使用 Maven Settings.xml使用构建缓存加速 CISonarQube properties 配置部署或升级工作负载使用 Params 跳过任务包含所有任务的完整示例使用 hub resolvers 指定
以下 pipeline run 示例引用了 catalog 中的 pipeline:
参数
Git Clone
-
git-url
- type: string
- default:
"" - description: 要克隆的 Repository URL。
-
git-revision
- type: string
- default:
"" - description: 要 checkout 的 Revision(branch、tag、sha、ref 等)。
-
skip-git-clone
- type: string
- default:
"false" - description: 跳过执行 git clone 任务。仅当对应的代码 Repository 已存在于 workspace 中时才能启用。
-
git-crt-file-name
- type: string
- default:
"ca-bundle.crt" - description: 使用 ssl-ca-directory workspace 挂载的 crt 文件名。默认值为 ca-bundle.crt。
Maven
-
maven-subdirectory
- type: string
- default:
. - description: Maven 项目的上下文目录。
-
maven-goals
- type: array
- default:
["package"] - description: 要运行的 Maven goals。
-
maven-mirror-url
- type: string
- default:
"" - description: Maven Repository mirror URL。
SonarQube Scanner
-
sonar-url
- type: string
- default:
"" - description: SonarQube Server 实例的 URL。如果未指定,将跳过 sonarqube scanner 任务。
-
sonar-project-key
- type: string
- default:
"" - description: Sonarqube 项目的唯一 key。
-
sonar-properties
- type: array
- default:
["sonar.sources=.", "sonar.java.binaries=target/classes"] - description: 要传递给 SonarQube 的其他 properties。有关详细信息,请参阅 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 命令的额外参数。警告:必须进行清理以避免命令注入(例如 --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-name
- type: string
- default: ""
- description: 要部署或升级的工作负载名称。如果未指定,将跳过
deploy-or-upgrade任务。
-
workload-kind
- type: string
- default: Deployment
- description: 要部署或升级的工作负载类型,例如 Deployment、StatefulSet 等。
-
workload-namespace
- type: string
- default: ""
- description: 要部署或升级的工作负载 namespace。如果未指定,将使用当前 TaskRun 的 namespace。
-
workload-container
- type: string
- default: []
- description: 此参数用于指定需要更新镜像的工作负载中的容器。默认情况下,将更新工作负载中所有容器的镜像。
-
workload-rollout-timeout
- type: string
- default: "0"
- description: 等待工作负载就绪前的等待时长,
0表示永不结束等待。其他值应包含对应的时间单位(例如 1s、2m、3h)。
-
workload-manifests-dir
- type: string
- default: ""
- description: 要部署的工作负载 manifest。如果未指定,则只更新集群中已有工作负载的镜像。可以使用
sourceworkspace 中 manifest 目录的相对路径。例如:"manifests"。
工作区
- source:用于在任务之间共享信息的 Workspace。
- git-basic-auth:包含 .gitconfig 和 .git-credentials 文件的可选 workspace。在运行任何 git 命令前,这些文件会被复制到用户的 home 目录。此 Workspace 中的其他文件会被忽略。强烈建议尽可能使用 ssh-directory 而不是 basic-auth,并优先将 Secret 绑定到此 Workspace,而不是使用其他卷类型。
- git-ssh-directory:包含 private key、known_hosts、config 等文件的可选 workspace。在执行 git 命令前会将其复制到用户的 home 目录。clone 时用于向 git remote 进行身份验证。强烈建议将 Secret 绑定到此 Workspace,而不是使用其他卷类型。
- git-ssl-ca-directory:包含 CA certificates 的可选 workspace;通过 HTTPS fetch 或 push 时,Git 将使用这些证书验证对端。
- maven-settings:包含自定义 Maven settings 的可选 workspace。
- maven-local-repo:用于 Maven 本地 repository 的可选 workspace。
- maven-server-secret:包含 server credentials 的可选 workspace。
- maven-trust-store:包含 Maven 使用的私有 CA 的 JKS truststore 的可选 workspace。
- sonar-settings:可挂载 SonarQube properties 的可选 workspace。
- sonar-credentials:包含 SonarQube 使用凭据的可选 workspace。
- registryconfig:用于 distribution registry 配置文件的可选 workspace;例如
config.json或.dockerconfigjson。此项可选,用于向 registry 推送镜像时进行身份验证。 - kubeconfig:包含 kubeconfig 文件的可选 workspace。kubeconfig 的名称应为
kubeconfig。如果此 workspace 中没有 kubeconfig,将忽略该 workspace。
平台
Task 可在 linux/amd64 和 linux/arm64 平台上运行。
使用
最小设置:使用最少参数端到端运行
未设置或省略时,可选任务(sonarqube-scanner、deploy-or-upgrade 等)将被正常跳过。
使用 Maven Settings.xml
可以挂载 maven-settings workspace,以便为 Maven 构建应用 settings.xml。
还可以使用 maven-mirror-url param 设置 Maven repository mirror。它将在 settings.xml 中作为 <mirror> 使用。
使用构建缓存加速 CI
附加持久化的 maven-local-repo workspace,以便在多次 pipeline run 之间缓存 .m2/repository 内容。
复用依赖可以大幅缩短 Maven 依赖解析时间,并显著减少多次运行之间的构建时间。
SonarQube properties 配置
可以挂载 sonar-settings workspace,或使用 sonar-properties param 将 properties 应用到 sonar-project.properties 文件。
默认 properties 为:sonar.sources=.、sonar.java.binaries=target/classes。
可以从 analysis parameters 和 Java 的 properties 中了解 SonarQube properties 的用法。
以下是一些可以设置的 properties:
部署或升级工作负载
可以使用此 pipeline 中 build-image 任务构建的镜像来部署或升级工作负载。
通过设置 workload-manifests-dir param,可以应用指定目录中的 Kubernetes manifests 来创建或更新工作负载。
支持 JSON 和 YAML 格式。指定目录中的所有 manifests 都将使用 kubectl apply 进行处理。请注意,kubectl apply 不会遍历子目录。
如果目录包含 Kustomize 配置文件(例如 kustomization.yaml、kustomization.yml 或 Kustomization),则会使用 kubectl kustomize 进行处理。
以下是 workload-manifests-dir 的示例结构:
可以配置以下参数:
如果不想使用 manifests 部署工作负载,只需将 workload-manifests-dir param 留空。在这种情况下,任务只会更新集群中现有工作负载的镜像。
需要为工作负载管理 image pull secrets。如果新镜像托管在不同的 registry 中,请确保为工作负载创建并配置适当的 pull secret。
使用 Params 跳过任务
pipeline 支持使用 params 跳过任务:
包含所有任务的完整示例
此示例演示如何使用 pipeline 中的所有任务。其中包括以下任务:
- 克隆源代码
- 使用 Maven 构建代码
- 构建镜像并将镜像推送到 registry。
- 使用 Trivy 扫描镜像
- 使用 SonarQube 扫描代码
- 部署或升级工作负载