Jenkins项目自动上线至kubernetes集群
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.210 | kube-apiserver 8080 | 2G |
192.168.81.220 | kube-node | 2G |
192.168.81.230 | jenkins(tomcat+jdk)8080 + kubelet | 2G |
192.168.81.240 | gitlab 8080 | 2G |
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回滚流程:新建一个项目将回滚命令粘贴到执行命令方框中,点击自动构建即可回滚
目录 返回
首页