k8s集成Jenkins实现项目自动上线

作者:神秘网友 发布时间:2020-10-23 23:27:48

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

k8s对接Jenkins

k8s集成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创建容器---并上线
ip服务内存
192.168.81.210kube-apiserver 80802G
192.168.81.220kube-node2G
192.168.81.230jenkins(tomcat+jdk)8080 + kubelet2G
192.168.81.240gitlab 80802G

3.1.安装

[[email protected] ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm

[[email protected] ~]# yum localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y

安装成功

k8s集成Jenkins实现项目自动上线

3.2.配置gitlab

1.修改配置文件
[[email protected] ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://192.168.81.240'		#13行,修改为gitlab的地址
prometheus_monitoring['enable'] = false    #1535行,关闭普罗米修斯监控

2.启动gitlab应用服务
[[email protected] ~]# gitlab-ctl reconfigure

3.每次开机后这样操作才能恢复应用
[[email protected] ~]# gitlab-ctl restart
[[email protected] ~]# gitlab-ctl reconfigure

k8s集成Jenkins实现项目自动上线

3.3.访问gitlab

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

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

3.4.修改gitlab nginx端口号

1)修改gitlab.rb
nginx['listen_port'] = 88			#1011行增加

2)修改nginx端口
[[email protected] ~]# vim /var/opt/gitlab/nginx/conf/gitlab-http.conf 
  listen *:88;
  
3)重启
先重启gitlab,在重载gitlab配置
[[email protected] ~]# gitlab-ctl restart
[[email protected] ~]# gitlab-ctl reconfigure

4)访问
http://192.168.81.240:88/

k8s集成Jenkins实现项目自动上线

4.1.新建一个项目

1)点击create a project

k8s集成Jenkins实现项目自动上线

2)填写信息并创建
k8s集成Jenkins实现项目自动上线

3)创建完成

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

k8s集成Jenkins实现项目自动上线

4.2.删除一个project

1)点击settings—general
k8s集成Jenkins实现项目自动上线

2)点击advance—expand
k8s集成Jenkins实现项目自动上线

3)点击remove project

k8s集成Jenkins实现项目自动上线

4.3.上传代码

1)上传源码
[[email protected] ~]# mkdir /data_web
[[email protected] ~]# cd /data_web
rz上传源码
[[email protected] data_web]# unzip know_system.zip 

2)安装git
[[email protected] data_web]# yum -y install git
[[email protected] data_web]# cd know_system/

3)git全局设置
[[email protected] know_system]# git config --global user.name "root"
[[email protected] know_system]# git config --global user.email "[email protected]"

4)上传代码到gitlab
初始化git
[[email protected] know_system]# git init

添加一下项目地址
[[email protected] know_system]# git remote add know_system http://192.168.81.240:88/root/know_system.git

添加一下当前路径的文件
[[email protected] know_system]# git add .

写一个描述信息
[[email protected] know_system]# git commit -m "Initial commit knowsystem"

[[email protected] know_system]# git push -u know_system master

k8s集成Jenkins实现项目自动上线

提交成功

k8s集成Jenkins实现项目自动上线

4.4.安装docker并编写dockerfile

1)安装
[[email protected] know_system]# yum -y install docker
[[email protected] 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'
[[email protected] know_system]# systemctl restart docker
[[email protected] know_system]# docker login 192.168.81.240
Username: admin
Password: 
Login Succeeded


2)编写dockerfile
[[email protected] know_system]# vim dockerfile
FROM 192.168.81.240/k8s/nginx:1.13
ADD . /usr/share/nginx/html

3)测试一下
[[email protected] know_system]# docker build -t know_system:v1 .
[[email protected] know_system]# curl -I 192.168.81.240:8001
HTTP/1.1 200 OK

k8s集成Jenkins实现项目自动上线

4.5.更新gitlab上的代码

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

将刚刚修改的dockerfile上传
[[email protected] know_system]# git add .

[[email protected] know_system]# git commit -m "add dockerfile"
[master 0d0c281] add dockerfile
 1 file changed, 2 insertions(+)
 create mode 100644 dockerfile
 
[[email protected] know_system]# git push -u know_system master
Username for 'http://192.168.81.240:88': root 
Password for 'http://[email protected]: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。

k8s集成Jenkins实现项目自动上线

5.1.yum安装Jenkins

1)安装
[[email protected] ~]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
Jenkins公钥文件
[[email protected] ~]# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
[[email protected] ~]# yum install java-1.8.0-openjdk -y 
[[email protected] ~]# yum install jenkins -y

2)修改Jenkins镜像地址,避免页面出现Please wait while Jenkins is getting ready to work ...
[[email protected] ~]# 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)启动
[[email protected] ~]# systemctl start jenkins
[[email protected] ~]# systemctl enable jenkins

jenkins数据都存放在/var/lib/jenkins/

5.2.tomcat安装Jenkins

1)安装jdk1.8
[[email protected] ~]# yum install java-1.8.0-openjdk -y 

2)安装tomcat
[[email protected] ~]# cd soft
[[email protected] soft]# wget http://down.i4t.com/apache-tomcat-8.5.39.tar.gz
[[email protected] soft]# mkdir /application
[[email protected] soft]# tar xf apache-tomcat-8.5.39.tar.gz -C /application/
[[email protected] soft]# mv /application/apache-tomcat-8.5.39/ /application/jenkins
[[email protected] soft]# rm –rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT

3)下载war包
[[email protected] soft]# wget http://down.i4t.com/jenkins.war
[[email protected] soft]# cp jenkins.war /application/jenkins/webapps/ROOT/
[[email protected] jenkins]# cd /application/jenkins/webapps/ROOT/
[[email protected] ROOT]# unzip jenkins.war

4)修改Jenkins镜像地址,避免页面出现Please wait while Jenkins is getting ready to work ...
[[email protected] ~]# 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)启动
[[email protected] jenkins]# ./bin/startup.sh 

启动完成后日志这样输出

k8s集成Jenkins实现项目自动上线

5.3.页面配置Jenkins

5.3.1.解锁Jenkins

密码从这个文件中获取

[[email protected] ~]# vim .jenkins/secrets/initialAdminPassword 
4fe7d507415547cdb21176a24b316daa

k8s集成Jenkins实现项目自动上线

5.3.2.安装Jenkins

自定义安装
k8s集成Jenkins实现项目自动上线

安装插件中

k8s集成Jenkins实现项目自动上线

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

k8s集成Jenkins实现项目自动上线

创建用户

k8s集成Jenkins实现项目自动上线

实例配置

k8s集成Jenkins实现项目自动上线

完成

k8s集成Jenkins实现项目自动上线

5.3.3.登录Jenkins

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

k8s集成Jenkins实现项目自动上线

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

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

k8s集成Jenkins实现项目自动上线

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

6.1.ssh认证免密登录

6.1.1.生成密钥对

生成公私钥
[[email protected] 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 [email protected]
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上
[[email protected] ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC99sW1Sv/bumVPVTGR3BujNK8CdR3AJh8arvNkFlyKo6MCUaFENb8oqSQuB3yrAf2RDjWSL3MQgk0IXTEr5I/1oiXDUrkIKI3wGnx/mhnS1ZDkcCf4eBOJvC/GYIO7jYW88Vr/WHmlseMj0aXfxssBAYD7aEB0QJj/jgNEoFkLgchDqnK+EHGvKGZ2gline93OWDbNcvrdOFfCj3Vb+nyzTjbIhfVjhK+PzB5vHKoMTpfkK0hHyQCJl+mVN6n1DZkq7Ehz1OWwfY2ycayEXfsVKSIiiplf1syk1TD5eLRzsJsj5SF+hSLP4G2HAswWNPHBNRokewArn7CjsiRMEul3 [email protected]

k8s集成Jenkins实现项目自动上线

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

获取私钥

[[email protected] ~]# cat .ssh/id_rsa

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

k8s集成Jenkins实现项目自动上线

2)点击全局

k8s集成Jenkins实现项目自动上线

3)点击添加凭据

k8s集成Jenkins实现项目自动上线

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

k8s集成Jenkins实现项目自动上线

5)将私钥导入

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

6.2.拉取代码

6.2.1.新建一个item

1)新建item

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

2)获取gitlab代码地址

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

k8s集成Jenkins实现项目自动上线

3)配置源码管理

k8s集成Jenkins实现项目自动上线

4)设置构建执行的命令

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

6.2.2.拉取gitlab代码

1)点击项目名即可进入
k8s集成Jenkins实现项目自动上线

2)立即构建

k8s集成Jenkins实现项目自动上线

3)查看构建日志

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

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

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

k8s集成Jenkins实现项目自动上线

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

1)安装docker
[[email protected] ~]# yum -y install docker

2)配置私有仓库
[r[email protected] ~]# 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)重启
[[email protected] ~]# systemctl restart docker

4)登录私有仓库
[[email protected] ~]# docker login 192.168.81.240
Username: admin
Password: 
Login Succeeded

7.2.配置构建镜像

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

1)点击配置

k8s集成Jenkins实现项目自动上线

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 

主要用到此变量

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

7.3.jenkins自建镜像

1)点击构建

k8s集成Jenkins实现项目自动上线

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

k8s集成Jenkins实现项目自动上线

查看输出发现构建成功

k8s集成Jenkins实现项目自动上线

2)查看harbor仓库的镜像

k8s集成Jenkins实现项目自动上线

3)创建一个看看

1.pull镜像
[[email protected] harbor]# docker pull 192.168.81.240/k8s/know_system:v5

2.运行镜像
[[email protected] harbor]# docker run -it -d -p 9999:80 192.168.81.240/k8s/know_system:v5

3.查看容器的地址
[[email protected] harbor]# docker inspect focused_goodall | less

4.访问页面
[[email protected] harbor]# curl  -I 172.17.0.2
HTTP/1.1 200 OK

5.拿真机去访问,注意标题一会和升级后的对比

k8s集成Jenkins实现项目自动上线

7.4.升级镜像并运行查看

1)修改页面代码

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

[[email protected] know_system]# vim index.html 
<title>知识点目录--update</title>

[[email protected] know_system]# git add  .
[[email protected] know_system]# git commit -m "update index"
[[email protected] know_system]# git push know_system master

真实环境都这么做

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

k8s集成Jenkins实现项目自动上线

k8s集成Jenkins实现项目自动上线

2)拉取代码推送

页面直接点击构建

k8s集成Jenkins实现项目自动上线

构建成功v6版

k8s集成Jenkins实现项目自动上线

3)pull下来运行并测试

[[email protected] 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
[[email protected] know_system]# docker run -itd -p 8999:80 192.168.81.240/k8s/know_system:v6
db15aa294faa6c172e10bce573ae233a648f6fb8fd37ae111cc87ee233c75e2d

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

k8s集成Jenkins实现项目自动上线

8.1.编写自动发布脚本

首先安装kubectl命令
[[email protected] ~]# yum -y install kubernetes-client
测试一下
[[email protected] ~]# 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.修改项目配置

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

k8s集成Jenkins实现项目自动上线

8.3.自动构建

8.3.1.第一次构建是run一个

点击立即构建
k8s集成Jenkins实现项目自动上线

查看日志输出

k8s集成Jenkins实现项目自动上线

访问页面内容

k8s集成Jenkins实现项目自动上线

查看k8s上创建的资源

k8s集成Jenkins实现项目自动上线

8.3.2.第二次构建就是更新

更新代码

k8s集成Jenkins实现项目自动上线

点击构建–看日志
k8s集成Jenkins实现项目自动上线

查看harbor仓库

k8s集成Jenkins实现项目自动上线

访问页面,查看是否更新

已更新

k8s集成Jenkins实现项目自动上线

8.4.自动回滚

8.4.1.命令回滚

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

8.4.2.jenkins自动回滚

新建一个项目

k8s集成Jenkins实现项目自动上线

直接填上回滚命令即可

k8s集成Jenkins实现项目自动上线

依旧点击自动构建

点击自动构建—看日志

已成功

k8s集成Jenkins实现项目自动上线

查看页面已回滚成功

k8s集成Jenkins实现项目自动上线

8.4.3.回滚记录

[[email protected] ~]# kubectl rollout history deployment -n know-system 

k8s集成Jenkins实现项目自动上线

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

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

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

k8s集成Jenkins实现项目自动上线相关教程

  1. k8s使用glusterfs做持久化存储(十三)

    k8s使用glusterfs做持久化存储(十三) k8s使用glusterfs存储 [[emailprotected] ~]# kubectl explain pv.spec语法格式kubectl explain 资源.命令.命令 1)编写yaml文件[[emailprotected] ~]# mkdir /k8s/glusterfs[[emailprotected] ~]# cd /k8s/glusterfs[[e

  2. jenkins 自动化部署(后台)

    jenkins 自动化部署(后台) 包的话需要自己到官网下载https://www.jenkins.io/download/ 安装jenkins rpm -ivh jenkins-2.190.3-1.1.noarch.rpm 修改Jenkins配置 vim /etc/sysconfig/jenkins 修改内容如下: JENKINS_USER=root JENKINS_PORT=10008 启动Jenki

  3. SpringBoot集成swagger-OpenAPI

    SpringBoot集成swagger-OpenAPI OpenAPI是swagger下的一个在线查看接口文档的工具包,可以随着项目的部署同时生成项目对应的所有接口文档 一、在pom引入maven的jar包 !--OpenApi-- dependency groupIdorg.springdoc/groupId artifactIdspringdoc-openapi-ui/a

  4. k8s1.18三节点集群部署+docker容器安装

    k8s1.18三节点集群部署+docker容器安装 k8s1.18三节点+docker容器安装 建三台虚拟机,三台虚拟机的信息如下: 注:建议IP地址是自己配的静态地址,因为动态的话改变网络地址就会改变,要重新配置(静态ip配置可参考https://blog.csdn.net/weixin_44764814/art

  5. k8s 中的deployment回滚操作

    k8s 中的deployment回滚操作 回滚到上一个版本: kubectl rollout undo deployment/nginx-test 也可以使用 --revision参数指定某个历史版本: kubectl rollout undo deployment/nginx-test --to-revision=2 历史记录 kubectl rollout history deployment/ngin

  6. 部署k8s 1.18版本及图形管理工具kuboard(十四)

    部署k8s 1.18版本及图形管理工具kuboard(十四) 部署k8s 1.18版本 [[emailprotected] ~]# hostnamectl set-hostname k8s-maste[[emailprotected] ~]# hostnamectl set-hostname k8s-node1[[emailprotected] ~]# cat /etc/hosts127.0.0.1 localhost localhost

  7. 如何实现oVirt与Tungsten Fabric的集成

    如何实现oVirt与Tungsten Fabric的集成 作者:Tatsuya Naganawa 译者:TF中文社区 oVirt是一个免费开源的企业级虚拟化解决方案,基于KVM(并整合了libvirt、Gluster、PatternFly和Ansible等开源软件)提供强大的开源虚拟化功能。 本文重点介绍oVirt与Tungsten

  8. 集成SpringBoot Admin 项目中使用 context-path的问题

    集成SpringBoot Admin 项目中使用 context-path的问题 当Springboot项目中设置了 server.servlet.context-path时,Admin管理后台会提示服务离线 原因: 看了后台发现,这里请求的actuator路径不对,这样看来只需修改下请求路径就ok了 我使用的是nacos注册中心