• 初识Jenkins


    背景

    大家知道我之前搭了个博客,地址是 www.xiaojieboshi.com ,搭建的过程大家可以看《1小时带你搭建vuepress高大上个人博客》 这篇文章。但是有个问题,就是我每次写完博客发布到服务器上很繁琐,我一直想搞一个自动发布,持续集成,但是一直在忙别的事耽误了。这次我决定研究一下,把这件事给做了。

    目的

    大家可以看下之前我的一种工作模式,首先代码是我写的,然后我要本地执行run npm build编译一下,然后推到github上面去,然后把生成的aaa文件夹打成压缩包,这个就是可以直接运行查看的文件,然后通过工具上传到linux服务器,然后在服务器上解压放到对应的文件夹下,然后重启下nginx,一套流程下来,十分的繁琐,粉色的步骤都是需要我做的。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHFbGe4f-1661786001632)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/de3ef854f3874a5da5b5fc452b4614e0~tplv-k3u1fbpfcp-watermark.image?)]

    但是我要达到的效果就是自动化部署,就是下面粉色的,我只要做编写代码以及push到github,剩下的通通由jenkins来帮我做完,这个就是本篇文章需要实现的效果。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tps0bqPB-1661786001633)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2a37577a6c654be7a9ec9aff98345ccc~tplv-k3u1fbpfcp-watermark.image?)]

    最后交代一下我买了一台腾讯云的服务器,43.128.34.245,jenkins和nginx都部署在上面,如下面所示:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZUwh2fr-1661786001634)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f82d05fb3eec44b49dcf66223eab6d9b~tplv-k3u1fbpfcp-watermark.image?)]

    接下来就是开始操作

    Linux安装jenkins

    1、安装jdk

    记得安装jdk11或者17,因为这里有一个坑,从2022年7月2日起,jenkins新版本不再支持java8,仅支持java11和java17,否则会报错。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nE8KpOwF-1661786001634)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/762d158822264475b9b246ced7260370~tplv-k3u1fbpfcp-watermark.image?)]

    2、上官网查找自己想要的版本,https://mirrors.jenkins-ci.org/redhat/

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qHbvlLH8-1661786001635)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/df00062a843846c3af5191879dd5956e~tplv-k3u1fbpfcp-watermark.image?)]

    3、选择需要的版本下载到本地,然后上传到linux服务器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WkfX81W-1661786001635)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/810495f1da464b3ab7c6610af584bca1~tplv-k3u1fbpfcp-watermark.image?)]

    4、直接安装

    rpm -ivh jenkins-2.364-1.1.noarch.rpm
    
    • 1

    安装成功
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KyM8RCUF-1661786001636)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/30e2e6800b79424aa9cb08d02ac371da~tplv-k3u1fbpfcp-watermark.image?)]

    5、修改启动端口

    vim /etc/syscofig/jenkins
    
    • 1

    我这里把端口号改成了1234

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qc13SMWG-1661786001637)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8ec1ea47603b461cbd97e6b6442d2179~tplv-k3u1fbpfcp-watermark.image?)]

    6、配置jdk路径

    vim /etc/init.d/jenkins
    
    • 1

    找到candidates这个变量,然后把安装的jdk11或者17路径添加进去

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thXLgrtf-1661786001637)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/51500b42cfbc495cb3eeba0f787d46ad~tplv-k3u1fbpfcp-watermark.image?)]

    7、重新加载一下

    systemctl daemon-reload
    
    • 1

    8、启动jenkins

    cd /etc/init.d
    
    # 启动
    ./jenkins start
    # 停止
    ./jenkins stop
    # 查看状态
    ./jenkins status
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    已经成功跑起来了
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ge7ciRab-1661786001637)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0d9c732a8dcf468a922e2a0991e45c82~tplv-k3u1fbpfcp-watermark.image?)]

    访问和初始化jenkins

    1、输入http://43.128.34.245:1234/

    IP是服务器IP地址,端口号是我刚刚设置的端口号

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BpU2zHAR-1661786001638)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7e63a9c782a448f7bef891bff0500250~tplv-k3u1fbpfcp-watermark.image?)]

    2、输入密码

    进入上面红色的路径/var/lib/jenkins/secrets/initialAdminPassword

    # 查看秘钥
    cat /var/lib/jenkins/secrets/initialAdminPassword
    
    • 1
    • 2

    然后把秘钥拷出来放进去,点击继续

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1AEPKDj-1661786001638)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c87c4f48c2d8458b8a40b5434c6c56ca~tplv-k3u1fbpfcp-watermark.image?)]

    3、安装插件

    我们选择推荐的即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3WeD1UM-1661786001638)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d4a66860301a414999c35ff1da9b0e77~tplv-k3u1fbpfcp-watermark.image?)]

    这个就是正在安装的页面
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmvxxhMc-1661786001639)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7d7c73ea649c4fe686046ed74125cfd7~tplv-k3u1fbpfcp-watermark.image?)]

    4、设置admin账户

    我们可以用默认的admin账号,但是建议自己重新创建一个

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wN7Zg5qv-1661786001639)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1d22f367ba63437abca158f945585de4~tplv-k3u1fbpfcp-watermark.image?)]

    保存并完成

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qe88MqkQ-1661786001639)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/66e2bd1c21bb47cf89cab53f5fb69937~tplv-k3u1fbpfcp-watermark.image?)]

    成功进入到界面
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ASWu7GA-1661786001640)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b96721a3448b4946a270501650737024~tplv-k3u1fbpfcp-watermark.image?)]

    准备工作

    增加权限

    jenkins在执行shell脚本的时候会报权限不够,这时候我们需要给jenkins root的权限。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fH1U0G9v-1661786001640)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/02d73ba70b304376961cb872846f9483~tplv-k3u1fbpfcp-watermark.image?)]

    修改配置文件

    vim /etc/sysconfig/jenkins
    
    • 1

    把JENKINS_USER=“jenkins” 改成 root

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcSAsng8-1661786001640)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/28e782ac20b1469aa36453ebd426ec4e~tplv-k3u1fbpfcp-watermark.image?)]

    修改Jenkins相关文件夹用户权限

    chown -R root:root /var/lib/jenkins
    chown -R root:root /var/cache/jenkins
    chown -R root:root /var/log/jenkins
    
    • 1
    • 2
    • 3

    重启下jenkins

    安装nodejs

    因为我们的项目是要用到node打包的,所以先在jenkins中安装nodeJs插件

    进入到插件管理,搜索nodejs,然后选中安装即可
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o8pCkt53-1661786001641)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/015a81427f854ddf87cb5405089adb4b~tplv-k3u1fbpfcp-watermark.image?)]

    安装完成后进入到全局工具管理,选择新增nodejs,选择版本,这个很重要,太高了可能会报错,选择和本地一样的版本稳妥,填上别名,打钩自动安装,然后保存即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXTsrDSw-1661786001641)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/55707a233a034e1595a5271ce7df6f10~tplv-k3u1fbpfcp-watermark.image?)]

    修改服务器时间

    查看服务器时间

    timedatectl | grep "Time zone"
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8XaQbGC-1661786001641)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/35ec47730f79468ca98cdc228bcfe7f9~tplv-k3u1fbpfcp-watermark.image?)]

    进入jenkins的管理,选择脚本命令行
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wW15U5mc-1661786001641)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a44a6625fd0646699effd16a5fd641f9~tplv-k3u1fbpfcp-watermark.image?)]

    输入命令,点击运行即可

    System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CXTRqdgz-1661786001642)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/727149a1b474422cb8e2dcc4ec5ddde9~tplv-k3u1fbpfcp-watermark.image?)]

    创建任务

    点击左侧的新建item
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f6xhYlLo-1661786001642)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ee7ba829625b4042a7a38566fd093a05~tplv-k3u1fbpfcp-watermark.image?)]

    输入名字,选择第一个,创建一个freestyle

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9b74rBmd-1661786001642)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/37eb5ffdf2ad4246a370e84622fac29d~tplv-k3u1fbpfcp-watermark.image?)]

    General

    通用这填下描述,构建记录保持7天,最多保持10次构建,还有github的地址

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wudMlzV6-1661786001643)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d9c70313f2f340ca868e15e7b7b9f45e~tplv-k3u1fbpfcp-watermark.image?)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJMLif0i-1661786001643)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/48df9c013ea24033b01799cb4cca965f~tplv-k3u1fbpfcp-watermark.image?)]

    源码管理

    设置github项目的仓库地址,我们看下报错了,蓝色框框里的信息,什么意思呢,就是你原先的密码凭证从2021年8月13日开始就不能用了,必须使用个人访问令牌(personal access token),就是把你的密码替换成token!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fuln7OLp-1661786001643)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6830153b0acf4d06be94094b29d9b4ef~tplv-k3u1fbpfcp-watermark.image?)]

    所以我们在添加凭证的时候,这里的密码不能填写密码,而是要填github上生成的token
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oc9sZqeB-1661786001644)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4c1fb32ad4ec45efb1160453f90ad946~tplv-k3u1fbpfcp-watermark.image?)]

    添加完成后报错消失,选择构建的分支为master分支

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tOFuIlLZ-1661786001644)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/99b48e87ba0f4a6dbf006e77f6a182dc~tplv-k3u1fbpfcp-watermark.image?)]

    构建环境

    选择全局工具管理里面安装的nodejs

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBghX5OG-1661786001644)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/10583aafb0cc4fbb8e3cdffa038a07f2~tplv-k3u1fbpfcp-watermark.image?)]

    构建步骤

    选择新增shell脚本

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZtTP3ql-1661786001644)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b3d7ae0703c04ebda833cb96402acc14~tplv-k3u1fbpfcp-watermark.image?)]

    在里面输入几行脚本,然后点击保存
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MN7N9Cwe-1661786001645)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6cd114b3b7e7454b8768b9aa62ef5642~tplv-k3u1fbpfcp-watermark.image?)]

    回到项目的管理界面测试一下,首先点1 Build Now,然后看到2处就会有个构建,构建完成后会变成绿色打钩,然后点3工作空间,可以看到4有个aaa文件夹生成了,这个就是jenkins把git上的代码拉下来,然后编译打包放到了aaa文件夹,这个就是可以直接运行的文件。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FdWvBldx-1661786001645)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/05fdc4d490b04a079c8437de46c3cb9c~tplv-k3u1fbpfcp-watermark.image?)]

    那么为什么会生成到aaa文件夹,因为这是我在代码里面配置的。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PxDhUqaS-1661786001645)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8adbba5f2d0a44679d4085551e6d0bd8~tplv-k3u1fbpfcp-watermark.image?)]

    好,测试完成了,接下来就是把生成的文件部署到nginx,因为这里我是把jenkins和nginx装到了一台机器上,所以直接把文件夹拷到nginx的工作空间即可,如果是分别装在两台机器上,则需要装Publish over SSH插件,由jenkins的机器把打好的包远程传输到nginx的那台机器上部署。

    我们看下剩下的命令

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoLQzc7c-1661786001646)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ed9bd18a2e864ca683dcac52466e6579~tplv-k3u1fbpfcp-watermark.image?)]

    那为什么我把页面解压缩到/jack/aaa下,然后重启下nginx就能生效了,其实还是我在nginx里面配的,在nginx.conf里,默认就是访问这个文件夹下面的页面。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6F6g37u-1661786001646)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/836152c056364ded8064bd53c0b63f6a~tplv-k3u1fbpfcp-watermark.image?)]

    至此,新建一个Job就结束了。

    Webhook

    好,还差最后一步,我们看到上面演示的时候构建是手动点的Build Now这个按钮,虽然点一下也不累,但是还是想偷懒,不想手动点怎么办。就是做Webhook,就是我每次开发完,代码推到github,自动触发构建。

    1、打开github,在settings里面增加一个webhook
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DKaPykmq-1661786001646)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/407585cb31174ce7b064191e8229e9fd~tplv-k3u1fbpfcp-watermark.image?)]

    2、在Payload URL填写jenkins的地址+/github-webhook/这是固定格式
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBMWNka1-1661786001646)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eb16d23b31624b3b859efdb95d56b75e~tplv-k3u1fbpfcp-watermark.image?)]

    3、打开项目的配置,在构建触发器github hook这里打上勾,保存下即可
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzPwvzJw-1661786001647)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f7871a09c4184f1f8099b635ea5af953~tplv-k3u1fbpfcp-watermark.image?)]

    4、测试一下,我在源码标题这里加了一个1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rkHIS5ta-1661786001647)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/60ae12ce38c748f6ae249215f1931fb7~tplv-k3u1fbpfcp-watermark.image?)]

    5、推送一下github,我们看commit记录是21点56分

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRzO9Eau-1661786001647)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6c6063c1fe4d4e7ab1c8fe7f1463de78~tplv-k3u1fbpfcp-watermark.image?)]

    6、我们看下jenkins上已经自动创建了一个构建任务,说明webhook已经成功了。现在的时间是21点59分,那么为什么差了三分钟,主要是我commit完代码,push了好几次才成功的,github大家都懂的,不是很好访问的,所以真正push成功是在59分。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXRdJvrA-1661786001648)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d4a6d1ed63e4e06a34669ad53d115d0~tplv-k3u1fbpfcp-watermark.image?)]

    7、最后访问下博客,发现标题也成功的改掉了,多了一个1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Q9vKRwQ-1661786001648)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5abc903bb011480595063fbe8fe4e243~tplv-k3u1fbpfcp-watermark.image?)]

    演示圆满成功

    结束语

    以上就是我在实现前端项目自动化部署的全部过程,学习过程总是需要自己动手去操作才能知道有没有真的掌握,期间其实遇到很多问题,通过一步步排查、查阅资料,最终完成搭建,自动化部署的方案有很多种,这里我选用的是jenkins的一种,最后欢迎小伙们点赞、收藏、关注,一键三连,谢谢~

  • 相关阅读:
    【国外框架】—— quasar 应用程序插件
    【程序的编译和预处理】
    接口自动化测试:pytest基础讲解
    Linux——网络套接字2|Tcp服务器编写
    【路径插值与抽稀篇】(3)路径插值与抽稀篇
    matplotlib绘制柱状图(普通、堆叠、左右分布)
    Spring-05 AOP入门( 原理解析)
    微软行星云计算——Chloris Global Biomass 2003 - 2019年全球生物质数据集
    wpf webBrowser控件 常用的函数和内存泄漏问题
    Docker Swarm 创建加密覆盖网络
  • 原文地址:https://blog.csdn.net/a779868946/article/details/126594573