009、使用jenkins实现k8s持续集成
本文最后更新于 69 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

使用jenkins实现k8s持续集成

一.项目架构的代码仓库使用gitee托管

架构描述我不打算用过多文字描述了,来我们一起直接看图吧....

image-20210824000630163

二.将测试代码上传到gitee

1.注册gitee账户

略。

2.创建仓库名称为"oldboyedu-yiliao"

如下图所示,安装图解方式创建相应的用户即可。

image-20210824002041431

3.将本地代码上传到"oldboyedu-yiliao"仓库

image-20210824002400789

(1)解压静态文件
[root@k8s101.oldboyedu.com ~]# tar xf yiliao.tar.gz;cd yiliao/
[root@k8s101.oldboyedu.com ~/yiliao]#

(2)Git本地提交代码到本地仓库
[root@k8s101.oldboyedu.com ~/yiliao]# git config --global user.name "jasonyin2020"
[root@k8s101.oldboyedu.com ~/yiliao]# git config --global user.email "y1053419035@qq.com"
[root@k8s101.oldboyedu.com ~/yiliao]# 
[root@k8s101.oldboyedu.com ~/yiliao]#  
[root@k8s101.oldboyedu.com ~/yiliao]# 
[root@k8s101.oldboyedu.com ~/yiliao]# git init
Initialized empty Git repository in /root/yiliao/.git/
[root@k8s101.oldboyedu.com ~/yiliao]# 
[root@k8s101.oldboyedu.com ~/yiliao]# git add .
[root@k8s101.oldboyedu.com ~/yiliao]# 
[root@k8s101.oldboyedu.com ~/yiliao]# git commit -m "oldboyedu linux yiliao code ..."

(3)git推送代码到gitee的远程仓库
[root@k8s101.oldboyedu.com ~/yiliao]# git remote add origin https://gitee.com/jasonyin2020/oldboyedu-yiliao.git
[root@k8s101.oldboyedu.com ~/yiliao]# git push -u origin master

温馨提示:
    如下图所示,此处我们成功将代码推送到远程仓库了。

image-20210824200622990

三.提交dockerfile文件

1.编写dockerfile

(1)编写dockerfile内容如下
cat > Dockerfile <<EOF
FROM k8s101.oldboyedu.com:5000/alpine

LABEL auther="oldboyedu linux77 & linux78"

LABEL school="oldboyedu" \
      class="linux" \
      address="北京,上海,深圳"

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk update && \
    apk add nginx && \
    rm -rf /var/cache/ && \
    rm -rf /usr/share/nginx/html/*

# ADD oldboyedu-yiliao.tar.gz /usr/share/nginx/html/
ADD . /usr/share/nginx/html/

EXPOSE 80

COPY default.conf /etc/nginx/http.d/default.conf

CMD ["nginx","-g","daemon off;"]
EOF

(2)本地测试编译
[root@k8s101.oldboyedu.com ~/yiliao]# docker build -t yiliao:v1 .

image-20210824210842362

2.启动容器测试可用性

[root@k8s101.oldboyedu.com ~/yiliao]# docker container run -itdp 80:80 yiliao:v1

温馨提示:
    如下图所示,如果能访问到咱们的测试页面,说明咱们的dockerfile编写的没问题哟~

image-20210824210716963

3.推送dockerfile文件到仓库中

[root@k8s101.oldboyedu.com ~/yiliao]# git add .
[root@k8s101.oldboyedu.com ~/yiliao]# 
[root@k8s101.oldboyedu.com ~/yiliao]# git commit -m "add dockerfile ..."
[master f32f77e] add dockerfile ...
 1 file changed, 5 insertions(+)
 create mode 100644 dockerfile
[root@k8s101.oldboyedu.com ~/yiliao]# 
[root@k8s101.oldboyedu.com ~/yiliao]# git push -u origin master
Username for 'https://gitee.com': jasonyin2020
Password for 'https://jasonyin2020@gitee.com': 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 381 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/jasonyin2020/oldboyedu-yiliao.git
   466b66e..f32f77e  master -> master
Branch master set up to track remote branch master from origin.
[root@k8s101.oldboyedu.com ~/yiliao]# 

image-20210824211819900

四.部署Jenkins并配置项目源码管理(gitee环境)

1.部署jenkins服务(我已安装好相关的插件,直接使用即可)

如下图所示,直接将我的软件包上传到"k8s103.oldboyedu.com"节点,并安装Jenkins即可。

(1)部署jdk环境(如果已经部署好jdk环境的话,直接跳过该步骤哈)
rpm -ivh jdk-8u102-linux-x64.rpm

(2)创建Jenkins的安装目录
 mkdir -pv /oldboyedu/softwares

(3)解压软件包到指定目录
tar xf apache-tomcat-8.0.27.tar.gz -C /oldboyedu/softwares/

(4)删除tomcat的初始数据
rm -rf /oldboyedu/softwares/apache-tomcat-8.0.27/webapps/*

(5)将Jenkins的war包放入tomcat的应用目录,注意复制过去要改名称哈(该war包大小约74MB)
cp jenkins.war /oldboyedu/softwares/apache-tomcat-8.0.27/webapps/ROOT.war

(6)解压Jenkins数据到/root目录下,解压后生成的是"/root/.jenkins"隐藏目录哟~(里面有大量安装好的软件哟~)
tar xf jenkin-data.tar.gz -C /root/

(7)启动tomcat服务
/oldboyedu/softwares/apache-tomcat-8.0.27/bin/startup.sh &>/dev/null 

(8)检查tomcat是否监听了相关的端口
ss -ntl | grep 8080

(9)Jenkins节点部署git环境,因为后期需要拉取代码
yum -y install git

image-20210824233311172

2.访问Jenkins服务

image-20210824232216143

如上图所示,我们直接输入Jenkins的用户名和密码,我这里配置的默认的用户名为:"admin",密码为:"123456"

如下图所示,成功输入用户名密码即可登录成功哟~

image-20210824232403224

3.创建项目

依次鼠标点击"新建任务" ---> "自定义任务名称" ---> 勾选"构建一个自由风格的软件项目" ---> "确定"。

image-20210825193840681

4.添加项目的存储库RUL

在上一步完成之后,会弹出如下图所示对话框,依次点击"源码管理" ---> "Git" ---> "Repositories" ---> ”Repository URL"中添加项目的存储库RUL

image-20210825200007213

5.添加凭证(Credentials)信息

依次点击上一步Credentials的"添加"按钮 ---> "jenkins",就会弹出如下图所示的对话框,然后根据你的账号密码登录即可。

image-20210825200732599

6.应用凭据

如下图所示,当我们在上一步完成凭据的添加后,我们就得应用咱们的凭据,这样之前的报错就消失啦!

温馨提示:
    如果之前的报错没有消失,就得请确认你是否配置了正确的认证信息,比如用户名或者密码错误之类的。

image-20210825201031991

7.配置构建指令

如下图所示,依次点击"构建" ---> "增加构建步骤" ---> 选择"执行shell" ---> "保存"。

温馨提示:
    (1)我之所以要使用"ls -lh"主要是验证一下咱们的文件是否全部被拉取到本地;
    (2)我使用"pwd"是想要看咱们当前的项目所在位置,由于我是基于war包方式部署的Jenkins,因此其数据默认的工作路径应该为"/root/.jenkins/workspace";

image-20210825202307015

8.点击立即构建

如下图所示,点击"立即构建",就可以成功构建当前的"oldboyedu-yiliao"这个工程了。

image-20210825202418734

9.查看控制台输出

如下图所示,我们当前在"oldboyedu-yiliao"这个工程中,目前已经构建完项目了,因此可以查看该项目的信息。

依次点击"#1"的下拉菜单 ---> "控制台输出"

image-20210825202550282

10.查看项目构建的控制台输出结果,来分析其执行的过程

如下图所示,我们可以查看到控制台输出效果如下。

image-20210825202842316

五.使用Jenkins实现自动构建镜像并推送到私有仓库

1.重新编辑"执行shell的命令"

image-20210825204541575

结合上下图对比,依次点击"配置" ---> "构建" ---> 重新编辑"执行shell"命令 ---> 再次点击"保存"。

执行shell的命令参考如下:
docker image build -t k8s101.oldboyedu.com:5000/yiliao:$version .
docker image push k8s101.oldboyedu.com:5000/yiliao:$version

image-20210825205059884

2.添加字符参数

image-20210825205412821

如下图所示,依次点击"General" ---> "参数化构建过程" ---> "添加参数" ---> 选择"字符参数" ---> 填写"version"变量即可。

image-20210825210118281

3.开始传入参数构建

image-20210825211514984

如上图所示,依次点击"Build with Parameters" ---> 输入"version"变量的版本信息 ---> "开始构建"。

如下图所示,构建完成之后,我们可以依次点击"#2"的下拉菜单 ---> 选择查看"控制台输出"的信息。

image-20210825211626495

4.构建完成后查看镜像是否生成

如下图所示,我们查看了"控制台输出",很明显能看到镜像推送成功了,而且在存储库的确有相关的tag记录哟。

温馨提示:
    我们假设私有仓库的存储卷路径为"$volume",则其对应的"yiliao"项目的tag存储为位于"$volume/docker/registry/v2/repositories/yiliao/_manifests/ta
gs/"

image-20210825212001719

5.验证镜像是否可用

(1)创建名称空间
kubectl create namespace oldboyedu-yiliao

(2)创建deployment
kubectl run yiliao --image=k8s101.oldboyedu.com:5000/yiliao:v0.1 --replicas=3 -n oldboyedu-yiliao

(3)创建service暴露deployment资源所创建的Pod
kubectl expose deployment yiliao --port=80 --target-port=80 --type=NodePort -n oldboyedu-yiliao

温馨提示:
    (1)如下图所示,如果能够正常访问服务,说明咱们的配置成功啦!
    (2)课堂练习,请将上述资源使用同一个yaml文件修改(基于文件可以更便于咱们定制化),并对容器进行持久化配置;

image-20210825214152062

六.使用Jenkins一键更新deployment

1.修改gitee的存储库中的源代码

如下图所示,我修改了源代码并提交。你可以根据自己的情况修改代码即可,仅仅用于测试而已。

image-20210825214726351

2.重新编辑"执行shell的命令"

如下图所示,只是在一次执行的命令前加了一条指令,用于远程执行连接apiserver并重新部署一个deployment资源而已。

kubectl -s k8s101.oldboyedu.com:8080 set image deployment yiliao yiliao=k8s101.oldboyedu.com:5000/yiliao:$version -n oldboyedu-yiliao

温馨提示:
    此处我是基于命令行进行更新的哟,生产环境中建议基于yaml方式进行更新,因为这有助于更多的定制化,比如持久化数据之类的。

image-20210825223607814

3.开始构建镜像

如下图所示,我们可以开始构建咱们的第二个yiliao镜像包的版本啦。

温馨提示:
    一旦镜像构建成功,这意味着会自动完成镜像的升级功能哟。

image-20210825220344851

4.验证镜像是否更新

如下图所示,当我们执行完上一步骤之后,访问相同的端口,你会发现服务实现升级了,整个过程不会感知到有服务宕机的情况哟。

image-20210825221951240

5.查看deployment控制器

如下图所示,我们需要手动点击Jenkins进行手动传参后其帮我们实现了自动升级。

image-20210825222221650

6.架构升级-课后作业

    现在的我觉得在Jenkins中手动传参也费劲呢,请实现当开发人员将代码后,自动实现代码的升级,整个过程运维不参与。

    项目需求:
        (1)开发人员(前端开发,后端开发,中间件开发)提交代码到gitee仓库后,直接访问K8S的svc资源暴露的端口即可;
        (2)运维人员负责整个项目运行,镜像打包成功后发送邮件到你的邮箱/钉钉/微信;
            版本号命名规则: 
                公司名-产品线-日期时间-时间戳.
            举个例子:
                oldboyedu-yiliao-`date +%F-%s`

七.使用Jenkins一键回滚deployment

1.创建一个专用于回滚的工程

为什么要创建新的工程,而不使用之前创建的工程呢?
    答:我们可以基于之前的工程进行回滚,但需要写各种判断,除此之外,如果回滚每次都会拉取一次代码比较浪费时间。

如下图所示,我们创建一个名为"oldboyedu-yiliao-undo"的工程。

image-20210825224555071

2.创建字符参数变量

如下图所示,我们需要创建字符参数变量哟。

image-20210825224817305

3.编辑构建参数

kubectl -s k8s101.oldboyedu.com:8080 set image deployment yiliao yiliao=k8s101.oldboyedu.com:5000/yiliao:$version -n oldboyedu-yiliao

image-20210825225039292

4.开始构建工程,回滚指定版本

如下图所示,我们可以回滚到指定的版本哟~

image-20210825225138774

5.验证回滚是否成功

如下图所示,我们成功完成了回滚啦!

image-20210825225910623

八.可能会遇到的报错

1. java.util.zip.ZipException: error in opening zip file

错误原因:
    无法打开war包,通常情况下是war包已损坏。

解决方案:
    检查war包是否可用。

image-20210824232712329

2.Help for feature: Repository URL Failed to connect to repository : Error performing command: git ls-remote -h https://gitee.com/jasonyin2020/oldboyedu-yiliao.git HEAD

报错原因:
    根据提示信息可知是由于执行命令时出错导致的,请检查Jenkins宿主机是否安装了git环境。

解决方案:
    部署git环境,只需只需"yum -y install git"

image-20210825195004201

3.stderr: fatal: Authentication failed for 'https://gitee.com/jasonyin2020/oldboyedu-yiliao/'**

问题原因:
    由于我们的项目是私有的,因此需要添加认证信息哟。

解决方案:
    如下图所示,在Credentials选项中,点击旁边的"添加"按钮,而后根据弹出的对话框修改相关的配置即可。

image-20210825195306678

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇