likes
comments
collection
share

使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes

作者站长头像
站长
· 阅读数 21

会使用到的 Kubernetes 集群管理页面 相关 Kuboard 安装教程请参考官网,此处不做赘述 Kuboard: kuboard.cn/

使用 Docker 安装 Jenkins

  • 使用 root 用户启动 Jenkins 容器,方便后续出问题可以进入容器进行调试
  • 挂载 jenkins_home 目录
  • 挂载 jdk、maven 到容器内
  • 挂载 docker,让容器可以使用宿主机 docker 命令,方便镜像构建推送等工作
docker run --name jenkins-blueocean --restart=on-failure --detach \
  --network jenkins \
  --publish 8080:8080 --publish 50000:50000 \
  --user=root \
  --volume /mnt/:/var/jenkins_home \
  --volume /workspace/jdk1.8:/usr/bin/jdk1.8 \
  --volume /workspace/maven3.6.3:/usr/bin/maven3.6.3 \
  --volume /usr/bin/docker:/usr/bin/docker \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume /root/.docker/config.jsoet:/root/.docker/config.jsoet \
 jenkins/jenkins:lts

配置 Jenkins

解锁 Jenkins

安装完成后访问 http://127.0.0.1:8080

初次访问需要使用密码解锁,可以直接通过docker logs -f jenkins/jenkins 访问容器日志查看,也可以通过 cat /var/jenkins_home/initialAdminPassword 查看

使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes

解锁直接安装推荐插件即可,如果网络不好多尝试几次,或者去 Jenkins 官网直接下载插件,本地上传安装。

官网插件地址:plugins.jenkins.io/

配置环境变量

进入系统管理 -> 系统配置 -> 下滑找到环境变量

  • 配置 jdk 使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes
  • 配置 maven 使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes
  • 配置 PATH 使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes

点击应用并保存

进入系统管理 -> 全局配置 -> 下滑找到 jdk、maven 配置 使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes

点击取消 maven 自动安装,选择本地 maven 文件目录 使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes

新建任务

新建流水线任务

完善 Jenkinsfile ,需将以下文件替换成自己的内容,如果对流水线语法不熟悉的,在流水线下方有流水线语法指引

pipeline {
    agent any
    environment {
        PATH = "PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/jdk1.8/bin:/usr/bin/maven3.6.3/bin"
        obj_path = "/var/jenkins_home/workspace/you job name"
    }
    stages {
        # 拉取代码 
        stage('pull code') {
            steps {
                git branch: 'master', credentialsId: '73392b20-7e59-4595-8530-a8fa848d6b0a', url: 'http://your github'
            }
        }
        # maven 构建代码
        stage('build code') {
            steps {
                # 进入项目 pom 文件目录, 使用绝对路径 mvn 构建 jar 包
                # 根据各自项目情况,也可以通过 maven 直接打包构建成 docker 镜像
                sh '''cd ${obj_path}/oms/
                /usr/bin/maven3.6.3/bin/mvn clean package -Dmaven.test.skip=true'''
            }
        }
        # 构建镜像,
        stage('build images') {
            steps {
                # 指定 docker 登陆命令,提前将镜像仓库密码写入 docker_password 中,使用以下命令一行脚本登陆 dockerhub
                # 此处使用 aliyun registry
                sh '''cat /var/jenkins_home/docker_password | docker login --username=your-username --password-stdin registry.cn-hangzhou.aliyuncs.com'''
                # 构建之前判断是否存在老的镜像,有的话执行删除操作,del-images.sh 脚本在下面
                sh '''/var/jenkins_home/del-images.sh registry.cn-hangzhou.aliyuncs.com/images-name'''
                # 执行 docker build 构建镜像,docker build 后面的 . 代表 Dockerfile 的位置,此处需要换成自己项目 Dockerfile 的绝对路径
                sh '''docker build -t registry.cn-hangzhou.aliyuncs.com/images-name:1.0.0 .'''
                # 构建完成执行 docker push 操作
                sh '''docker push registry.cn-hangzhou.aliyuncs.com/images-name:1.0.0'''
            }
        }    
        # 调用 Kuboard CICD 接口,完成部署操作
        # 此操作需要提前在 Kuboard 的中对项目进行部署操作
        # 也可以直接选择 kubectl 的方式进行部署,需要在 Jenkins 中下载 SSH 相关插件,连接 k8s control-plane 节点所在机器执行对应脚本
        stage('start project') {
            steps {
                sh '''curl -X PUT \
                    -H "Content-Type: application/yaml" \
                    -H "Cookie: KuboardUsername=admin; KuboardAccessKey=your KuboardAccessKey" \
                    -d '{"kind":"deployments","namespace":"default","name":"your pod name"}' \
                    "http://ip:port/kuboard-api/cluster/cluster/kind/CICDApi/admin/resource/restartWorkload"'''
            }
        }
    }
}

镜像删除命令

project=$1
images_id=`docker images | grep ${project} | awk '{print $3}'`
echo $images_id
if [ "$images_id" != "" ] ; then
  docker rmi -f $images_id
fi

配置完成后点击应用并保存,进入任务点击立即构建等待流水线完成作业 如果哪一步错误可以直接点击查看 logs 看下是提示什么问题。 如果没有问题则正常完成流程执行。

使用 Jenkins 配合 Kuboard CICD 自动部署项目到 Kubernetes

常见问题总结

一、maven setting.xml 文件无权限

jenkins@jenkins-7f9c9dbbf6-t8v79:~/workspace/newoms-test/yks-oms$ /var/jenkins_home/maven3.6.3/bin/mvn clean
[ERROR] Error executing Maven.
[ERROR] 1 problem was encountered while building the effective settings
[FATAL] Non-readable settings /var/jenkins_home/maven3.6.3/conf/settings.xml: /var/jenkins_home/maven3.6.3/conf/settings.xml (Permission denied) @ /var/jenkins_home/maven3.6.3/conf/settings.xml

解决方案:去到宿主机挂载目录执行

# 赋予执行读写权限
chmod 777 /mnt/maven3.6.3/conf/setting.xml

二、Docker 没有权限

解决方案:对 docker 进行所有用户执行权限

# 去到宿主机挂载目录执行
chmod 777 /var/run/docker.sock