首页 > 编程语言 >以Java项目为例,实现Jenkins对接CCE Autopilot集群

以Java项目为例,实现Jenkins对接CCE Autopilot集群

时间:2024-07-03 09:09:36浏览次数:1  
标签:Java 自定义 为例 secret 集群 jenkins Autopilot 镜像 docker

本文分享自华为云社区《Jenkins对接CCE autopilot集群实战》,作者: 可以交个朋友。

一 背景

鉴于日趋流行的serverless技术架构、以及用户经常谈及的降本的需求。考虑Jenkins主从架构的特性,slave节点可以在工作的时候部署在任意平台上执行master节点下发的任务,因此可以基于CCE Autopilot集群为Jenkins的agent节点设置运行平台。

二 简介

  • 以java项目为例,完成java 业务从代码拉取、maven编译、构建镜像、推送镜像、修改yaml文件推送到代码仓库等一系列CI流程。
  • jenkins agent容器使用谷歌提供的Kaniko镜像

三 操作实践

提前安装好jenkis,并配置kubernetes插件。

3.1 配置jenkins连接autopilot集群

创建autopilot集群的连接凭据

类型: 选择secret file

file: 上传autopilot集群的kubeconfig配置文件

image.png

Clouds中配置连接autopilot集群

在系统管理中选择clouds,点击新增

image.png

Cloud name: 自定义即可

Type: 选择Kubernetes

image.png

Kubernetes地址: 填写autopilot集群的apiserver连接地址

Kubernetes命名空间: 动态agent运行的命名空间,可自定义

image.png

凭据: 选择步骤1创建的凭据,选择完凭据之后点击测试连接,连接正常就能查看集群版本

jenkins地址: jenkins的访问地址

jenkins通道: jenkins访问的50000端口,需要创建svc开发该端口

image.png

配置完成,最后保存即可。

 

3.2 配置pod模板

在Clouds中选择Pod Templates然后点击创建

image.png名称: 可自定义

命名空间: 选择和Clouds配置一样即可,如:default

用法: 默认即可。例如: 只允许运行绑定到这台机器的job

image.png

配置基础镜像模版

名称: 填写jnlp,固定写法

Docker镜像: inbound镜像,执行 docker pull jenkins/inbound-agent,然后上传到swr

工作目录: 自定义

image.png

配置Maven打包镜像

名称: 填写maven,可自定义,写pipeline时会用到

Docker镜像: maven镜像,docker pull maven:3.8.1-jdk-8,然后又推送到swr镜像仓库

工作目录: 自定义

运行命令: sleep

运行参数: 9999999

image.png

配置build镜像任务

名称: 填写build,可自定义,写pipeline会用到

Docker镜像: kaniko镜像,docker pull aiotceo/kaniko-executor,提前推送到SWR

工作目录: 可以自定义

运行命令: /busybox/cat

image.png

 

3.3 其他配置

对Maven的打包目录进行缓存

前提:需要前提创建一个PVC存储

申明值:填写创建的PVC存储名称

挂载路径:固定填写/root/.m2

image.png

配置拉取镜像的secret

名称:固定填写default-secret

image.png

配置连接swr的secret

登录ECS服务器,配置连接autopilot集群,执行如下代码:

yum install git -y 
kubectl create secret docker-registry swr-secret  \
--docker-server=https://swr.cn-******.com \
--docker-username=***** --docker-password=****** \
--dry-run=client -o json |jq -r  \
'.data.".dockerconfigjson"' |base64 -d > /tmp/config.json
kubectl create secret generic swr-secret --from-file=config.json

docker-server:填写swr的接口地址

docker-username:填写 region@ak,通过AK,SK获取长期登录指令。 例如: cn-north-7@HL9SLYV9UDY428M6TAJ5

docker-password:填写SK,通过AK,SK获取长期登录指令。

配置Secret Volume

Secret名称: 填写上面生成的secret名字

挂载路径: kaniko/.docker,固定写法

image.png

3.4 编写pipeline

def repository_url = "swr.******.com"
def git_repo = "https://******.git"
def app_git_branch = "master"

podTemplate(
inheritFrom: 'agent',
cloud: 'test'
) {
  node(POD_LABEL) {
      stage('拉取代码'){‘
        echo "pull clone"'
        git branch: "${app_git_branch}", url: "${git_repo}"
    }
  container('maven'){
      stage('编译打包'){
        echo "build package"
        sh "mvn clean package -DskipTests"
    }
  }
  
  container('build'){
      stage('镜像构建'){
        echo "build images and push images"
        sh "/kaniko/executor -f Dockerfile -c . -d  ${repository_url}/tomcat:${BUILD_ID} --force"
    }
  }
  }
 }

四 结果展示

jenkins agent 运行在autopilot 集群中

image.png

推送镜像到SWR镜像仓库中

image.png

jenkins CI阶段视图如下

image.png

点击关注,第一时间了解华为云新鲜技术~

 

标签:Java,自定义,为例,secret,集群,jenkins,Autopilot,镜像,docker
From: https://www.cnblogs.com/huaweiyun/p/18280925

相关文章

  • Java中新生代和老年代是什么?
    在Java中,新生代(YoungGeneration)和老年代(OldGeneration)是Java虚拟机(JVM)堆内存中的两个主要部分,它们共同管理着Java对象的内存分配和回收。新生代主要用于存放新创建的对象。由于大多数对象在创建后不久就变得不再可达(即成为垃圾),因此新生代被设计成相对较小且回收频繁的内存区......
  • 基于Java中的SSM框架实现口腔护理网站系统项目【项目源码+论文说明】计算机毕业设计
    基于Java中的SSM框架实现口腔护理网站系统演示摘要本文主要讲述了是使用Jsp与Mysql数据库实现基于SSM框架的口腔护理网站的详细过程。这里所谓的口腔护理网站是建立一个类似于医院的医疗系统使得所有的患者人员有一个更方便的工具,从而可以随时预约自己的口腔护理。口腔护......
  • JavaScript-WebAPI
    文章目录JS组成什么是webApis和APIDOM简介document对象获取DOM对象利用css选择器来获取DOM元素选择指定css选择器的所有元素其他获取DOM元素方法(了解)操作元素内容对象.innerText对象.innerHTML操作元素属性操作元素常用属性操作元素样式属性通过style属性操作......
  • JAVA函数式编程
    函数式编程概念,JAVA八新特性Lambda表达式和流(Stream)的使用。一、基本概念命令式编程:是一种描述计算机所需作出的行为的编程典范。主要思想是关注计算机执行的步骤,计算机则会严格遵循指令。  传统的硬件运行的机器码指令就是以命令式分格编写的。也就是对于需要实现的......
  • JAVA并发工具类
    JAVA中并发工具类CountDownLatch、CyclicBarrier和Semaphore的概念和使用。一、CountDownLatch(计数器)  CountDownLatch的应用场景是某个线程任务需要等待其他的线程全部执行完毕才能执行,这时候就可以使用CountDownLatch类。其内部使用计数器实现,计数器的初始值为线程的数......
  • JAVA并发知识
    JAVA常见的并发知识点,概念和使用方法。一、Synchronized和Lock的区别Synchronized:Synchronized是Java提供的关键字,可以在需要同步的对象中加入此控制。其可以用来修辞方法,也可以加在特定代码块中,而修辞特定代码块时括号中表示需要锁的对象。JVM底层实现:  Synchronized......
  • JAVA文件IO流
    基本的目录、文件操作,常用的IO输入输出流类介绍和使用。一、目录及文件操作Java中File类(文件类)以抽象的方式代表文件名和目录路径名,File对象则代表了磁盘中实际存在的文件和目录。  File类不仅仅提供灵活的构造方法,同时还可以用于文件和目录的创建、文件的查找和文件的......
  • 学习java第一百一十八天
    @Component和@Bean的区别是什么?@Component注解作用于类,而@Bean注解作用于方法。@Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径从中找出标识了需要装配的类自动装配到Spring的bean容器中)。@B......
  • java的序列化和反序列化
    一、概念序列化是将对象的常态存储到特定的存储介质中的过程。反序列化是将特定的存储介质中的数据重新构建对象的过程。问题为每个对象属性——编写读写代码,过程很繁琐且非常容易出错,如何解决? 二、使用ObjectOutputStream类实现序列化a.序列化的对象所属类必须为可......
  • java07
    数组数组的声明和创建dataType[]=arrayRefVar创建数组dataType[]arrayRefVar=newdataType[array.length];数组长度arrays.length内存堆:1,存放new的对象和数组2,栈:1,存放基本的变量类型2,引用对象的变量数组的注意事项1.数组一旦被创建,长度就是确定的2.其元素必须......