热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在kubernetes上的JenkinsfileMaven构建中正确覆盖“settings.xml”吗?

我们正在Kubernetes集群(如果需要的话,Rancher)上建立基于Jenkins的CI管道,到目前

我们正在Kubernetes集群(如果需要的话,Rancher)上建立基于Jenkins的CI管道,到目前为止,我们已经使用官方maven:3-jdk-11-slim图像进行实验。不幸的是,它没有提供任何内置方法来覆盖默认的settings.xml以使用镜像,这是我们需要的-最好仅通过设置环境变量即可。我对kubernetes不太熟悉,所以我可能缺少一些简单的东西。

有没有简单的方法可以向图像添加文件?我是否应该使用内置此功能的其他图像?


pipeline {
agent {
kubernetes {
yaml """
kind: pod
metadata:
name: kaniko
spec:
containers:
- name: maven
image: maven:3-jdk-11-slim
command:
- cat
tty: true
- name: kaniko
.... etc


如果要覆盖pod中的文件,可以使用ConfigMap来存储更改的文件并挂载它,而不是以前的文件。

您可以使用

从文件创建ConfigMap。

kubectl create configmap settings-xml --from-file=settings.xml

您的pod定义可能如下所示:

apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: maven
image: maven:3-jdk-11-slim
command:
- cat
tty: true
volumeMounts:
- name: config-settings
mountPath: /usr/share/maven/ref/settings.xml
volumes:
- name: config-settings
configMap:
# Provide the name of the ConfigMap containing the files you want
# to add to the container
name: settings-xml
...

,

摘要:您可以在特定位置将您的 settings.xml文件安装在Pod上,并通过命令mvn -s /my/path/to/settings.xml使用该文件。

Crou的ConfigMap方法是一种实现方法。但是,由于settings.xml文件通常包含凭据,因此我将其视为Secrets。

您可以使用以下命令在Kubernetes中创建一个秘密:

$ kubectl create secret generic mvn-settings --from-file=settings.xml=./settings.xml

广告连播定义如下:

apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: maven
image: maven:3-jdk-11-slim
command:
- cat
tty: true
volumeMounts:
- name: mvn-settings-vol
mountPath: /my/path/to
volumes:
- name: mvn-settings-vol
secret:
secretName: mvn-settings

高级/可选:如果您练习“将基础结构作为代码”,则可能要保存该秘密的清单文件以进行恢复。这可以在秘密创建后通过以下命令实现:

$ kubectl get secrets mvn-settings -o yaml

您可以保留secrets.yml文件,但不要签入任何VCS / Github存储库,因为此版本的secrets.yml包含未加密的数据。

某些k8s管理员可能已安装kubeseal。在这种情况下,我建议使用kubeseal获取secrets.yml的加密版本。

$ kubectl create secret generic mvn-settings --from-file=settings.xml=./settings.xml --dry-run -o json | kubeseal --controller-name=controller --controller-namespace=k8s-sealed-secrets --format=yaml >secrets.yml
# Actually create secrets
$ kubectl apply -f secrets.yml

controller-namecontroller-namespace应该从k8s管理员那里获得。
secrets.yml包含您的settings.xml的加密数据,可以安全地签入VCS / Github存储库中。

,

这对我有用:


  • 安装配置文件提供程序插件

  • 转到“管理Jenkins”>“配置文件管理”>添加新配置,并在此处插入您的settings.xml

  • 在您的jenkins文件中,只需将rtMavenRun放在configFileProvider块中,然后将与您之前创建的jenkins配置文件相同的fileId放进去

stage('Build Maven') {
steps {
configFileProvider([configFile(fileId: 'MavenArtifactorySettingId',variable: 'MAVEN_SETTINGS_XML')]) {
retry(count: 3) {
rtMavenRun(
tool: "Maven 3.6.2",//id specified in Global Tool Configuration
pom: 'pom.xml',goals: '-U -s $MAVEN_SETTINGS_XML clean install',)
}
}
}
}

如果您想了解更多信息,这正是我使用的管道:https://gist.github.com/robertobatts/42da9069e13b61a238f51c36754de97b

,

如果您使用代码对项目的settings.xml进行了版本控制,则可以使用 sh 步骤使用mvn install -s settings.xml进行构建。这是我在工作中所做的。如果settings.xml没有随项目一起版本化,那么使用Crou的解决方案来挂载文件确实很有意义。

回答您的问题“我是否应该使用内置此功能的其他图像?”我建议避免最大程度地构建自定义图像,因为您最终将不得不对其进行维护


推荐阅读
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • k8s之Service介绍
    1、Service是什么?​Service是一种k8s集群中访问pod的一种策略。k8s中的pod具有生命周期,且不可复活。每个pod有着自己的IP地址,pod的销毁与创建都会创新 ... [详细]
  • k8snamespace配置cpu最大和最小限额
    世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。问:如何为namespace配置最大和最小限额&#x ... [详细]
  • docker+k8s+git+jenkins
    docker+k8s+git+jenkins,Go语言社区,Golang程序员人脉社 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 一、概述ceph为k8s提供存储服务主要有两种方式,cephfs和cephrdb;cephfs方式支持k8s的pv的3种访问模式ReadWriteOnce,ReadOnlyMany ... [详细]
  • 探讨异步 Rust 中多线程代码无法实现并行化的原因及解决方案。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 在Spring Boot项目中,通过YAML配置文件为静态变量设置值的方法与实践涉及以下几个步骤:首先,创建一个新的配置类。需要注意的是,自动生成的setter方法默认是非静态的,因此需要手动将其修改为静态方法,以确保静态变量能够正确初始化。此外,建议使用`@Value`注解或`@ConfigurationProperties`注解来注入配置属性,以提高代码的可读性和维护性。 ... [详细]
  • Kubernetes_如何在GO语言中使用Kubernetes API?
    本文由编程笔记#小编为大家整理,主要介绍了如何在GO语言中使用KubernetesAPI?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Kubernetes 1.2 新功能解析:multizone(多区)支持
    导论Kubernetes1.2增加的一个新的功能是把一个集群跑在多个failurezone里(谷歌GCE管它叫“zone”,亚马逊AWS管它们叫“ava ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
author-avatar
长风剑客2502852893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有