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

华为云开发者社区 2024-07-03 09:09:00 阅读 78

Jenkins是一个 CI/CD 工具,其master/slave架构非常适合运行分布式构建的可扩展性场景。

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

一 背景

鉴于日趋流行的<code>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

<code>Cloud name: 自定义即可

Type: 选择Kubernetes

image.png

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

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

image.png

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

jenkins地址: jenkins的访问地址

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

image.png

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

3.2 配置pod模板

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

image.png

<code>名称: 可自定义

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

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

image.png

配置基础镜像模版

<code>名称: 填写jnlp,固定写法

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

工作目录: 自定义

image.png

配置Maven打包镜像

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

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

工作目录: 自定义

运行命令: sleep

运行参数: 9999999

image.png

配置build镜像任务

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

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

工作目录: 可以自定义

运行命令: /busybox/cat

image.png

3.3 其他配置

对Maven的打包目录进行缓存

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

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

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

image.png

配置拉取镜像的secret

<code>名称:固定填写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

<code>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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。