本文分享自华为云社区《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 filefile
: 上传autopilot集群的kubeconfig配置文件 - Clouds中配置连接autopilot集群
在系统管理中选择clouds,点击新增 Cloud name
: 自定义即可Type
: 选择KubernetesKubernetes地址
: 填写autopilot集群的apiserver连接地址Kubernetes命名空间
: 动态agent运行的命名空间,可自定义凭据
: 选择步骤1创建的凭据,选择完凭据之后点击测试连接,连接正常就能查看集群版本jenkins地址
: jenkins的访问地址jenkins通道
: jenkins访问的50000端口,需要创建svc开发该端口- 配置完成,最后保存即可。
3.2 配置pod模板
- 在Clouds中选择Pod Templates然后点击创建
名称
: 可自定义命名空间
: 选择和Clouds配置一样即可,如:default用法
: 默认即可。例如: 只允许运行绑定到这台机器的job- 配置基础镜像模版
名称
: 填写jnlp,固定写法Docker镜像
: inbound镜像,执行 docker pull jenkins/inbound-agent,然后上传到swr工作目录
: 自定义 - 配置Maven打包镜像
名称
: 填写maven,可自定义,写pipeline时会用到Docker镜像
: maven镜像,docker pull maven:3.8.1-jdk-8,然后又推送到swr镜像仓库工作目录
: 自定义运行命令
: sleep运行参数
: 9999999 - 配置build镜像任务
名称
: 填写build,可自定义,写pipeline会用到Docker镜像
: kaniko镜像,docker pull aiotceo/kaniko-executor,提前推送到SWR工作目录
: 可以自定义运行命令
: /busybox/cat
3.3 其他配置
- 对Maven的打包目录进行缓存
前提
:需要前提创建一个PVC存储申明值
:填写创建的PVC存储名称挂载路径
:固定填写/root/.m2 - 配置拉取镜像的secret
名称
:固定填写default-secret - 配置连接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@HL9SLYV9UDY428M6TAJ5docker-password
:填写SK,通过AK,SK获取长期登录指令。
4、配置Secret VolumeSecret名称
: 填写上面生成的secret名字挂载路径
: kaniko/.docker,固定写法
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 集群中
- 推送镜像到SWR镜像仓库中
- jenkins CI阶段视图如下