这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
一个人需要的东西愈少,他的幸福就愈大,一个人的愿望愈多,他的自由就愈少。———— 高尔基《我的大学》
根据上一篇文章 在 k8s 中安装并使用 jenkins 已经安装好了 jenkins,接下来我将介绍如何配置 jenkins 实现 CI/CD。
通过此流程不仅可以实现 java 项目的 CI/CD,对于前端以及 python 项目也可以实现自动构建镜像、推送镜像并且部署到 k8s 集群。
1. 配置插件更新站点为国内源
默认插件更新站点为: https://updates.jenkins.io/update-center.json
修改插件更新站点为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
如下图所示:
2. 下载常用插件
下载常用插件如下图所示:
3. 配置 kubernetes 集群
点击 【系统管理】—> 【节点管理】—> 【Configure Clouds】
这里不做任何配置,直接点击【连接测试】就可以发现连接 k8s 成功,如下图所示:
配置 k8s 集群相关,如下图:
配置 pod 模板,如下图:
在 pod 模板中添加第一个容器:jenkins/inbound-agent
,作为 jenkins 的 slave 节点,如下图所示:
在 pod 模板中添加第二个容器:docker
,用于构建已经推送镜像,如下图所示:
在 pod 模板中添加第三个容器:maven:3.8.1-openjdk-11
,如下图所示:
根据需要添加更多容器,比如需要构建前端项目,可以添加一个 node:16.6.1-slim
容器,如下图所示:
4. 为 maven 容器配置缓存和挂载 settings.xml
若需要为Jenkins Slave Pod挂载自定义Settings文件,则可以先创建Config Map Volume,再配置到Pod Template上。
执行以下命令创建自定义Settings文件:
kubectl -n default create configmap maven-config --from-file=settings.xml
在卷下单击添加卷,选择Config Map Volume类型卷,另一个是 maven 的配置,为了持久化依赖,提高构建速度,配置如下图所示:
5. 使用 docker 构建和推送容器镜像
使用docker推送镜像时,需要设置镜像仓库的访问权限,通过下面的方式设置:
执行以下命令登录镜像仓库,登录镜像仓库的同时会生成 config.json文件:
docker login -u <username> -p <password> registry.cn-hangzhou.aliyuncs.com
在jenkins命名空间下使用生成的config.json文件创建名为 my-secret 的Secret:
kubectl create secret generic jenkins-docker-cfg -n default --from-file=/root/.docker/config.json
在Jenkins系统的Pod Template中配置挂载卷及环境变量:
6. 配置访问k8s的kubeconfig
配置访问k8s的kubeconfig,在pipeline中使用kubernetesDeploy
的时候会使用到
- [Manage Credentials] -> [jenkins] -> [全局凭据] -> [添加凭据]
7. 设置拉取私有仓库镜像的用户名和密码
- [Manage Credentials] -> [jenkins] -> [全局凭据] -> [添加凭据]
8. 测试 devops 构建流程
创建一个 pipeline 项目,如下图所示:
在流水线脚本中输入如下内容:
pipeline {
// 定义本次构建使用哪个标签的构建环境
agent{
node{
label 'slave-pipeline'
}
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
// 拉取代码
stage('git clone') {
steps {
git branch: "master", credentialsId: "", url: "https://gitee.com/peterwd/devops-demo.git"
}
}
// 运行源码打包命令
stage('Package'){
steps{
container("maven") {
sh "mvn --version"
sh "mvn clean package -DskipTests"
}
}
}
// 运行容器镜像构建和推送命令
stage('Image Build And Publish'){
steps{
container('docker') {
sh 'docker version'
}
}
}
// 运行 node 构建命令
stage('node'){
steps{
container('node') {
sh 'npm version'
}
}
}
}
}
如下图所示:
点击保存,并构建,显示如下: