配置 jenkins 实现 CI/CD

1,531 阅读3分钟

这是我参与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

如下图所示:

image-20210804143447318.png

2. 下载常用插件

下载常用插件如下图所示:

image-20210804144427284.png

3. 配置 kubernetes 集群

点击 【系统管理】—> 【节点管理】—> 【Configure Clouds】

image-20210804160525105.png

image-20210804160807930.png

这里不做任何配置,直接点击【连接测试】就可以发现连接 k8s 成功,如下图所示:

image-20210804161226915.png

配置 k8s 集群相关,如下图:

image-20210804192743089.png

配置 pod 模板,如下图:

image-20210804165346794.png

在 pod 模板中添加第一个容器:jenkins/inbound-agent,作为 jenkins 的 slave 节点,如下图所示:

image-20210804194625102.png

在 pod 模板中添加第二个容器:docker,用于构建已经推送镜像,如下图所示:

image-20210804194659822.png

在 pod 模板中添加第三个容器:maven:3.8.1-openjdk-11,如下图所示:

image-20210804194813162.png

根据需要添加更多容器,比如需要构建前端项目,可以添加一个 node:16.6.1-slim 容器,如下图所示:

image-20210804195917454.png

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 的配置,为了持久化依赖,提高构建速度,配置如下图所示:

image-20210805153542451.png

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中配置挂载卷及环境变量:

image-20210805153117834.png

6. 配置访问k8s的kubeconfig

配置访问k8s的kubeconfig,在pipeline中使用kubernetesDeploy的时候会使用到

  • [Manage Credentials] -> [jenkins] -> [全局凭据] -> [添加凭据]

7. 设置拉取私有仓库镜像的用户名和密码

  • [Manage Credentials] -> [jenkins] -> [全局凭据] -> [添加凭据]

8. 测试 devops 构建流程

创建一个 pipeline 项目,如下图所示:

image-20210804201525734.png

在流水线脚本中输入如下内容:

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'
              }
          }
        }
    }
}

如下图所示:

image-20210804201855270.png

点击保存,并构建,显示如下:

image-20210805102208271.png