Jenkins项目自动上线至kubernetes集群

it2025-12-13  9

k8s对接Jenkins

1.jenkins工作流程

1.开发还是一样的写java代码,写好java代码后提交到gitlab仓库中,Jenkins在通过gitlab去拉取这些代码,开发只需要在Jenkins页面上点一下立即构建,就会调用shell命令将代码通过docker build 来构建镜像。 2.dockerfile一般研发同事会写好,如果研发不会写,运维也可以帮忙写,通用是这样的,由运维构建一个只有lnmp的镜像,研发在写dockerfile时from指定lnmp的镜像即可了。 3.构建完docker镜像后会将镜像上传到私有仓库中。 4.一般会在Jenkins服务器远程通过kubectl -s apiserver地址去调用k8s管理命令去启动一个容器,kube-apiserver会调用node节点去私有仓库获取镜像并运行开始工作。 5.如果是全新部署直接使用run命令部署即可,在用expose开放端口,过滤出svc的端口发个邮件提示上线成功。 整个流程就是,开发写代码---将代码上传至gitlab---Jenkins在从gitlab上获取代码并通过shell命令去构建成镜像---将镜像上传至私有仓库---在调用kube-apiserver去调度kubelet创建容器---并上线

2.环境规划

ip服务内存192.168.81.210kube-apiserver 80802G192.168.81.220kube-node2G192.168.81.230jenkins(tomcat+jdk)8080 + kubelet2G192.168.81.240gitlab 80802G

3.安装gitlab

3.1.安装

[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm [root@gitlab ~]# yum localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y

安装成功

3.2.配置gitlab

1.修改配置文件 [root@gitlab ~]# vim /etc/gitlab/gitlab.rb external_url 'http://192.168.81.240' #13行,修改为gitlab的地址 prometheus_monitoring['enable'] = false #1535行,关闭普罗米修斯监控 2.启动gitlab应用服务 [root@gitlab ~]# gitlab-ctl reconfigure 3.每次开机后这样操作才能恢复应用 [root@gitlab ~]# gitlab-ctl restart [root@gitlab ~]# gitlab-ctl reconfigure

3.3.访问gitlab

访问http://192.168.81.240/users/sign_in 尽量不要让服务器占用80端口 第一次访问需要创建用户,这里账号是root,密码admin123

3.4.修改gitlab nginx端口号

1)修改gitlab.rb nginx['listen_port'] = 88 #1011行增加 2)修改nginx端口 [root@gitlab ~]# vim /var/opt/gitlab/nginx/conf/gitlab-http.conf listen *:88; 3)重启 先重启gitlab,在重载gitlab配置 [root@gitlab ~]# gitlab-ctl restart [root@gitlab ~]# gitlab-ctl reconfigure 4)访问 http://192.168.81.240:88/

4.gitlab上传代码

4.1.新建一个项目

1)点击create a project

2)填写信息并创建

3)创建完成

刚创建完成的项目下面没有代码是这个样子的

4.2.删除一个project

1)点击settings—general

2)点击advance—expand

3)点击remove project

4.3.上传代码

1)上传源码 [root@gitlab ~]# mkdir /data_web [root@gitlab ~]# cd /data_web rz上传源码 [root@gitlab data_web]# unzip know_system.zip 2)安装git [root@gitlab data_web]# yum -y install git [root@gitlab data_web]# cd know_system/ 3)git全局设置 [root@gitlab know_system]# git config --global user.name "root" [root@gitlab know_system]# git config --global user.email "15910468023@163.com" 4)上传代码到gitlab 初始化git [root@gitlab know_system]# git init 添加一下项目地址 [root@gitlab know_system]# git remote add know_system http://192.168.81.240:88/root/know_system.git 添加一下当前路径的文件 [root@gitlab know_system]# git add . 写一个描述信息 [root@gitlab know_system]# git commit -m "Initial commit knowsystem" [root@gitlab know_system]# git push -u know_system master

提交成功

4.4.安装docker并编写dockerfile

1)安装 [root@gitlab know_system]# yum -y install docker [root@gitlab know_system]# vim /etc/sysconfig/docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=https://registry.docker-cn.com --insecure-registry=192.168.81.240' [root@gitlab know_system]# systemctl restart docker [root@gitlab know_system]# docker login 192.168.81.240 Username: admin Password: Login Succeeded 2)编写dockerfile [root@gitlab know_system]# vim dockerfile FROM 192.168.81.240/k8s/nginx:1.13 ADD . /usr/share/nginx/html 3)测试一下 [root@gitlab know_system]# docker build -t know_system:v1 . [root@gitlab know_system]# curl -I 192.168.81.240:8001 HTTP/1.1 200 OK

4.5.更新gitlab上的代码

更新就是先用add添加一下文件,在加一个注释信息,在推送即可

将刚刚修改的dockerfile上传 [root@gitlab know_system]# git add . [root@gitlab know_system]# git commit -m "add dockerfile" [master 0d0c281] add dockerfile 1 file changed, 2 insertions(+) create mode 100644 dockerfile [root@gitlab know_system]# git push -u know_system master Username for 'http://192.168.81.240:88': root Password for 'http://root@192.168.81.240:88': Counting objects: 4, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To http://192.168.81.240:88/root/know_system.git 1300815..0d0c281 master -> master 分支 master 设置为跟踪来自 know_system 的远程分支 master。

5.安装Jenkins

5.1.yum安装Jenkins

1)安装 [root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo Jenkins公钥文件 [root@jenkins ~]# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key [root@jenkins ~]# yum install java-1.8.0-openjdk -y [root@jenkins ~]# yum install jenkins -y 2)修改Jenkins镜像地址,避免页面出现Please wait while Jenkins is getting ready to work ... [root@jenkins ~]# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml <?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url> </site> </sites> 3)启动 [root@jenkins ~]# systemctl start jenkins [root@jenkins ~]# systemctl enable jenkins jenkins数据都存放在/var/lib/jenkins/

5.2.tomcat安装Jenkins

1)安装jdk1.8 [root@jenkins ~]# yum install java-1.8.0-openjdk -y 2)安装tomcat [root@jenkins ~]# cd soft [root@jenkins soft]# wget http://down.i4t.com/apache-tomcat-8.5.39.tar.gz [root@jenkins soft]# mkdir /application [root@jenkins soft]# tar xf apache-tomcat-8.5.39.tar.gz -C /application/ [root@jenkins soft]# mv /application/apache-tomcat-8.5.39/ /application/jenkins [root@jenkins soft]# rm –rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT 3)下载war包 [root@jenkins soft]# wget http://down.i4t.com/jenkins.war [root@jenkins soft]# cp jenkins.war /application/jenkins/webapps/ROOT/ [root@jenkins jenkins]# cd /application/jenkins/webapps/ROOT/ [root@jenkins ROOT]# unzip jenkins.war 4)修改Jenkins镜像地址,避免页面出现Please wait while Jenkins is getting ready to work ... [root@jenkins ~]# vim .jenkins/hudson.model.UpdateCenter.xml <?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url> </site> </sites> 5)启动 [root@jenkins jenkins]# ./bin/startup.sh

启动完成后日志这样输出

5.3.页面配置Jenkins

5.3.1.解锁Jenkins

密码从这个文件中获取

[root@jenkins ~]# vim .jenkins/secrets/initialAdminPassword 4fe7d507415547cdb21176a24b316daa

5.3.2.安装Jenkins

自定义安装

安装插件中

如有失败的,安装完成后进入Jenkins后再更新插件

创建用户

实例配置

完成

5.3.3.登录Jenkins

访问http://192.168.81.230:8080/login?from=%2F 用户名密码是刚刚设置的admin/admin

5.3.4.解决第一次登录空白问题

访问http://192.168.81.230:8080/pluginManager/advanced 点击提交 然后重启tomcat

6.Jenkins从gitlab拉取代码

大致流程:首先生成一对密钥,将公钥在gitlab上导入,私钥在jenkins新增一个凭证写入私钥,导入后在jenkins新增一个项目,然后填入gitlab项目地址,并关联凭证,点击构建即可拉取代码

6.1.ssh认证免密登录

6.1.1.生成密钥对

生成公私钥 [root@jenkins application]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:uq0yNtNj6IN3E9j2sgC4Qw1IIPDcdfXQ3btNYoMVzw8 root@jenkins The key's randomart image is: +---[RSA 2048]----+ |*. . ..o. ..o | |+o . . . o. oo.| |..o . .oE +| | .o . +oo| |.... o S . ++| |.. .. +. ..| |o ..+.o | | .. X.Bo. | | +.O+*. | +----[SHA256]-----+

6.1.2.在gitlab上添加公钥

进入gitlab点击右上角的图像—setting----ssh keys—将公钥填入—add key

获取公钥并粘贴到gitlab上 [root@jenkins ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC99sW1Sv/bumVPVTGR3BujNK8CdR3AJh8arvNkFlyKo6MCUaFENb8oqSQuB3yrAf2RDjWSL3MQgk0IXTEr5I/1oiXDUrkIKI3wGnx/mhnS1ZDkcCf4eBOJvC/GYIO7jYW88Vr/WHmlseMj0aXfxssBAYD7aEB0QJj/jgNEoFkLgchDqnK+EHGvKGZ2gline93OWDbNcvrdOFfCj3Vb+nyzTjbIhfVjhK+PzB5vHKoMTpfkK0hHyQCJl+mVN6n1DZkq7Ehz1OWwfY2ycayEXfsVKSIiiplf1syk1TD5eLRzsJsj5SF+hSLP4G2HAswWNPHBNRokewArn7CjsiRMEul3 root@jenkins

6.1.3.在Jenkins上添加凭据(私钥)

获取私钥

[root@jenkins ~]# cat .ssh/id_rsa

1)点击管理詹金斯-----管理凭证

2)点击全局

3)点击添加凭据

4)填写凭据信息—类型选择ssh—写上username(随便起)—enter directly—add

5)将私钥导入

6.2.拉取代码

6.2.1.新建一个item

1)新建item

2)获取gitlab代码地址

通过ssh连接gitlab因此获取gitlab ssh地址

3)配置源码管理

4)设置构建执行的命令

6.2.2.拉取gitlab代码

1)点击项目名即可进入

2)立即构建

3)查看构建日志

6.2.3.查看项目在服务器上的存储路径

位于/var/lib/jenkins/workspace/这个目录,这里面会存放gitlab上的代码

7.jenkins自建docker镜像

7.1.在jenkins上安装docker并配置私有仓库

1)安装docker [root@jenkins ~]# yum -y install docker 2)配置私有仓库 [root@jenkins ~]# vim /etc/sysconfig/docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=https://registry.docker-cn.com --insecure-registry=192.168.81.240' 3)重启 [root@jenkins ~]# systemctl restart docker 4)登录私有仓库 [root@jenkins ~]# docker login 192.168.81.240 Username: admin Password: Login Succeeded

7.2.配置构建镜像

只需要修改项目执行的命令就可以了

1)点击配置

2)配置执行的命令

两种方式 1)固定死版本 docker build -t 192.168.81.240/k8s/know_system:v$BUILD_ID . docker push 192.168.81.240/k8s/know_system:v$BUILD_ID 点表示dockerfile路径,jenkins从Gitlab上拉取了代码,目前当前项目是在代码路径的 2)使用变量 jenkins有很多变量可以在页面上找 项目不可能一成不变,因此采用变量方式 docker build -t 192.168.81.240/k8s/know_system:v$BUILD_ID . docker push 192.168.81.240/k8s/know_system:v$BUILD_ID

主要用到此变量

7.3.jenkins自建镜像

1)点击构建

构建失败会出来雷电的图标

查看输出发现构建成功

2)查看harbor仓库的镜像

3)创建一个看看

1.pull镜像 [root@gitlab harbor]# docker pull 192.168.81.240/k8s/know_system:v5 2.运行镜像 [root@gitlab harbor]# docker run -it -d -p 9999:80 192.168.81.240/k8s/know_system:v5 3.查看容器的地址 [root@gitlab harbor]# docker inspect focused_goodall | less 4.访问页面 [root@gitlab harbor]# curl -I 172.17.0.2 HTTP/1.1 200 OK 5.拿真机去访问,注意标题一会和升级后的对比

7.4.升级镜像并运行查看

1)修改页面代码

两种方式:第一种在gitlab服务器修改,然后推送至gitlab,第二种直接在gitlab页面编辑

[root@gitlab know_system]# vim index.html <title>知识点目录--update</title> [root@gitlab know_system]# git add . [root@gitlab know_system]# git commit -m "update index" [root@gitlab know_system]# git push know_system master 真实环境都这么做

在gitlab上找到index.html点击进去点击edit即可编辑,编辑完点击下面的commit

2)拉取代码推送

页面直接点击构建

构建成功v6版

3)pull下来运行并测试

[root@jenkins know_system]# docker pull 192.168.81.240/k8s/know_system:v6 Trying to pull repository 192.168.81.240/k8s/know_system ... v6: Pulling from 192.168.81.240/k8s/know_system Digest: sha256:40861239ba01a79729aa049fa512f24ad39fa354468ec7ca743f9bc8130067fd [root@jenkins know_system]# docker run -itd -p 8999:80 192.168.81.240/k8s/know_system:v6 db15aa294faa6c172e10bce573ae233a648f6fb8fd37ae111cc87ee233c75e2d

访问页面已经更新,已经和v5版不一样

8.jenkins自动发布

8.1.编写自动发布脚本

首先安装kubectl命令 [root@jenkins ~]# yum -y install kubernetes-client 测试一下 [root@jenkins ~]# kubectl -s 192.168.81.210:8080 get nodes NAME STATUS AGE 192.168.81.220 Ready 23d 脚本内容 #!/bin/bash image_name=know_system k8s_name=know-system harbor_ip=192.168.81.240 harbor_xm=k8s k8s_master="192.168.81.210:8080" k8s_node=192.168.81.220 if [ -f /tmp/${image_name}.lock ];then docker build -t ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID . docker push ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID kubectl -s $k8s_master set image -n $k8s_name deploy $k8s_name $k8s_name=${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID echo "更新成功" else docker build -t ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID . docker push ${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID kubectl -s $k8s_master create namespace $k8s_name kubectl -s $k8s_master run $k8s_name -n $k8s_name --image=${harbor_ip}/${harbor_xm}/${image_name}:v$BUILD_ID --replicas=3 --record kubectl -s $k8s_master expose -n $k8s_name deployment $k8s_name --port=80 --type=NodePort port=`kubectl -s $k8s_master get svc -n $k8s_name | grep -oP '(?<=80:)\d+'` echo "你的项目地址是http://${k8s_node}:${port}" touch /tmp/${image_name}.lock fi

8.2.修改项目配置

只需要修改命令为脚本内容即可

8.3.自动构建

8.3.1.第一次构建是run一个

点击立即构建

查看日志输出

访问页面内容

查看k8s上创建的资源

8.3.2.第二次构建就是更新

更新代码

点击构建–看日志

查看harbor仓库

访问页面,查看是否更新

已更新

8.4.自动回滚

8.4.1.命令回滚

kubectl -s 192.168.81.210:8080 rollout undo -n know-system deployment know-system

8.4.2.jenkins自动回滚

新建一个项目

直接填上回滚命令即可

依旧点击自动构建

点击自动构建—看日志

已成功

查看页面已回滚成功

8.4.3.回滚记录

[root@k8s-master ~]# kubectl rollout history deployment -n know-system

9.总结

jenkins自建镜像流程:首先提交代码到gitlab,jenkins服务器生成密钥文件,将公钥导入到gitlab中,在jenkins页面新增一个凭据,将私钥写入,然后在新增一个项目,源码管理选择Git,写入Gitlab ssh地址,并关联好凭据,构建命令写成执行dockerfile的命令并推送到harbor上,保存后点击自动构建即可

jenkins自动发布流程:首先编写一个脚本,如果第一次发布,发布成功后提示一个项目访问地址,往后再发布就提示更新成功,然后将脚本粘贴到项目配置中的执行命令部分即可,然后点击自动构建,会调用k8s去创建deployment资源和svc资源,然后访问应用即可

jenkins回滚流程:新建一个项目将回滚命令粘贴到执行命令方框中,点击自动构建即可回滚

最新回复(0)