jenkins持续集成--看我如何从1到代码自动部署
admin
2023-02-23 02:00:09
0

jenkins持续集成看我如何从1到代码自动化部署

背景

近期由于工作原因需要学习jenkins持续化集成。对于一个好学又帅气的我来说。学习他还不是手到擒来。公司为一个中小型创业公司,在部署代码上面,很少用gitlab、jenkins等等,也没有清晰的生产环境-测试环境-线上环境之分。唯一有的就是写完代码-登陆服务关闭服务,上传代码-开启服务。这样往往会到来很多问题,同时也会给程序员带来很多繁琐的工作。这不,公司内部整顿,需要一套清晰的流程,而且为了减轻程序员的负担,于是就希望采用gitlab+jenkins来部署代码。

需求

程序员通过提交代码到gitlab上;触发jenkins自动部署触发器;部署到测试服务器,如果正常,提交到正式线上环境

环境介绍

Ubuntu18.04 :

          网络:内网环境
          服务:gitlab环境

Ubuntu16.04:

          网络:内网环境
          服务:jenkins

Centos 7 :

          网路:公网环境
          服务:php+nginx+mysql

公网环境为一个测试环境,这里没有线上环境,引一个环境就可以,测试成功上线是同理的道理。

部署过程

为什么从1到自动化部署呢?是因为我不太想写安装部署的过程。过程非常简单,没有坑点和难点。稍稍百度一下就有很多。

前提条件:
1、你要有自己的gitlab账号和自己的项目,当然用别人的项目也行,不过在后面设置一些权限信息的时候,可能会很麻烦别人。所以自己的才是最方便的。
2、你的公网服务器一定要能访问到内网gitlab的项目,因为为了减少出错,采用的是公网服务器pull gitlab的代码。具体的我们后面聊。
3、有一个不怕困难的心,和帅气的脸。

一、安装相关插件

点击系统管理-插件管理,通过搜索框即可下载你想要对插件。这个在刚初始化jenkins的时候也有一次安装插件的步骤,尽量装,使劲装。根据自己的需求哈!

二、在jenkins上创建一个job

1、新建任务
jenkins持续集成--看我如何从1到代码自动部署
2、输入任务名称-选择-选择流水线-确定
jenkins持续集成--看我如何从1到代码自动部署
简要介绍一下这几个项目的优缺点

Freestyle Job
需在页面添加模块配置项与参数完成配置
每个Job只能实现一个功能
无法代码化,不利于迁移与版本控制

流水线项目
所有参数都可以体现为一个pipeline脚本
可以定义多个stage构建一个管道工作集
配置代码化,方便Job配置迁移与版本控制
脚本写在Jenkins项目里

多分支流水线
优点同流水线
脚本写在GitLab项目里(Jenkinsfile)

关于多分支的流水线,推荐博客https://blog.51cto.com/12639039/2352222

3、进入到job的配置界面-点击构建触发器
General不需要配置
因为需求是程序员向gitlab提交了新的代码,jenkins触发。所以在构建触发器的时候选择下面这个选项

jenkins持续集成--看我如何从1到代码自动部署

这里请不要忽略Gitlab webhook URL:。这个webhook就是用来触发jenkins自动构建的。

点击高级,创建 Secret token

jenkins持续集成--看我如何从1到代码自动部署
4、gitlab上添加步骤3 的webhook
jenkins持续集成--看我如何从1到代码自动部署
在url处填写webhook;Secret Token处填写步骤三随机生成的字符串。完成过,点击添加即可。
jenkins持续集成--看我如何从1到代码自动部署

在这里可以进行测试连通性。
注意到这里的时候,你可能会遇到一个问题:有些用户添加的时候会报这样一个错误,
jenkins持续集成--看我如何从1到代码自动部署
说是不允许本地网络请求。这是由于新版本安全性的问题造成的,非常容易解决!
解决方法:使用gitlab管理员账户登陆。
jenkins持续集成--看我如何从1到代码自动部署
将那两个全部勾选。然后回去重新添加即可。
5、编写pipeline脚本
jenkins持续集成--看我如何从1到代码自动部署
这里有两个选择,第一个是在这里直接写入脚本(温馨提示,脚本在自己电脑上的编辑器上写好粘贴到这里,因为这里的编辑器像吃了翔一样难用!太难了。。。)第二个是使用jenkinsfile文件。我使用了第一个(因为演示操作简单,易懂!嘿嘿)。
写完后点击保存。即可完成一个job的创建

你以为这就完了。最重要的才刚刚开始!!!!!!!!!!!!!!!!!!!!!!!!!!!


三、pipeline script编写

让我们再来回顾一下需求:

程序员通过提交代码到gitlab上;出发jenkins自动部署触发器;部署到测试服务器,如果正常,提交到正式线上环境。不过,我觉得这个没有任何挑战性。我想自己加点难度,不管部署过程是否成功,都要有个钉钉消息发到程序员小哥哥的群里,给他们个警示!

话不多说,上代码一点点解释:
温馨提示:这是我为了满足自身需要而编写的代码,请不要照搬,当然与我有同样需求的随意喽。同时中间的解释也根据我的代码去解释,没有刻意去讲解语法,请谅解!

pipeline{
    agent any
    stages{
        stage("拉去代码"){
            steps {
                echo "STEP 1 :clone code"
            }

        }
        stage("打包代码"){
            steps {
                echo "step 2 : code package"
                sh label: '', script: '/usr/bin/ssh -p 62322 root@*.*.*.* "cd /var/www/html/pipeline/mytest && git pull && chmod -R 777 /var/www/html/pipeline/mytest/storage && composer install"'
            }
        }
        stage("上线发布"){
            steps {
                echo "step 3 :deploy package"
            }
        }
    }
    post {
        success {
            dingTalk accessToken:'钉钉机器人的token', 
            imageUrl:'图片的url', 
            jenkinsUrl:'http://192.168.5.194:8080/', 
            message:'pipeline-test代码部署成功。', 
            notifyPeople:''
        }
        failure {
            dingTalk accessToken:'钉钉机器人的token', 
            imageUrl:'图片的url', 
            jenkinsUrl:'http://192.168.5.194:8080/', 
          message:'pipeline-test代码部署失败'。, 
          notifyPeople:''
        }
    }

}

详解:

agent

          指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。

echo

          写一个简单的字符串到控制台输出。注意这里不是shell命令行的echo或php语法。和他们作用相同而已。

stage

          定义了在整个流水线的执行任务的概念性地不同的的子集(比如 "Build", "Test" 和 "Deploy" 阶段), 它被许多插件用于可视化 或Jenkins流水线目前的 状态/进展.

可能这句话不太形象(我第一次看官文也是蒙蔽),来张图
jenkins持续集成--看我如何从1到代码自动部署

其中最后一个是post处理的状态。

在打包代码的stage块中

sh label: '', script: '/usr/bin/ssh  root@*.*.*.* "cd /var/www/html/pipeline/mytest && git pull && chmod -R 777 /var/www/html/pipeline/mytest/storage && composer install"'

这是通过jenkins的片段生成器生成的符合语法的命令,可以在shell中去执行的命令
那么,如何使用jenkins片段生成器?
(1)、点击流水线语法
jenkins持续集成--看我如何从1到代码自动部署

(2)、从实例步骤中选择sh:shell script。在文本框输入需要生成的shell命令,
jenkins持续集成--看我如何从1到代码自动部署
(3)、点击生成流水线脚本 按钮即可成成相应的流水线语法

Post

类似于python中try语句。如何根据stage执行的结果而进行特定处理则是实际Pipeline使用中经常会碰到的问题。所以这里post就是来做对异常处理的功能。同时,你也可以理解为自由风格中的构建后的操作步骤(在自由风格中发钉钉可以下载dingding的插件)。而这个post块,就是我要满足自己加的钉钉反馈的需求。说到这里为了让大家更明白post的使用方法想再多解释一下:

使用限制:

需要写在pipeline或者stage块中
注意:post块的位置一定要遵循这个原则,否则不会执行。

支持的条件预置:

always: 无论pipeline或者stage的执行结果如何,此块中的预置操作都会执行。

changed:只有当pipeline或者stage的执行后,当前状态与之前发生了改变时,此块中的预置操作才会执行。

fixed:前一次运行为不稳定状态或者失败状态,而且本次运行成功结束,这两个条件同时满足时,此块中的预置操作才会执行。

regression: 本次运行状态为不稳定状态,失败状态或者是中止状态,而且前一次运行成功结束,这两个条件同时满足时,此块中的预置操作才会执行。

aborted:当前pipeline或者stage的状态为aborted时,此块中的预置操作才会执行。通常是由于流水线被手工中会导致此状态产生,而产生此状态后,通常在Jenkins的UI界面会显示为灰色。

failure:当前pipeline或者stage的状态为failed时,此块中的预置操作才会执行。而产生此状态后,通常在Jenkins的UI界面会显示为红色。

success:当前pipeline或者stage的状态为success时,此块中的预置操作才会执行。而产生此状态后,通常在Jenkins的UI界面会显示为绿色。

unstable: 当前pipeline或者stage的状态为unstable时,此块中的预置操作才会执行。通常情况下测试失败或者代码规约的违反都会导致此状态产生,而产生此状态后,通常在Jenkins的UI界面会显示为黄色。

unsuccessful:当前pipeline或者stage的状态不是success时,此块中的预置操作才会执行。

cleanup:无论pipeline或者stage的状态为何种状态,在post中的其他的条件预置操作执行之后,此块中的预置操作就会执行。

我用到了两个,分别是success和failure,在成功时应该做什么操作,在失败时应该做什么操作。

dingTalkaccessToken:'钉钉机器人的token', 如果不知道如何添加钉钉机器人,去隔壁百度即可
imageUrl:'在发送的信息里会附加这个图片',
jenkinsUrl:'自己jenkins的访问地址', 发送的信息就是这个链接,可以直接跳转到我们的jenkins
message:'发送的文本信息、提示信息',
notifyPeople:'需要通知的人'

到这里我的脚本的大概情况也就介绍完毕。如果想了解详细的jenkins语法,推荐学习地址
https://jenkins.io/zh/doc/book/pipeline/ 中文的,而且挺详细。我这里写的脚本仅仅是满足我的个人需求,有类似需求的伙伴可以参考!

再来一个温馨提示:初学者一定注意好代码块的书写,尽量做到规范,因为这样才好容易排错。 Groovy 语法大都代码块可能因为一个花括号就能找个半天。所以尽量规范。如果有 Groovy 语法高亮的编辑器就更好了。

四、测试job运行情况
点击立即构建
jenkins持续集成--看我如何从1到代码自动部署

执行完毕后,通过控制台输出可以看到整个过程

jenkins持续集成--看我如何从1到代码自动部署
钉钉消息
jenkins持续集成--看我如何从1到代码自动部署

到此便大功告成,让你们的程序员小哥哥去推代码试试吧!

相关内容

热门资讯

“直-20家族”全亮相 近日,在陆军某旅直升机分队演训中,直-20与直-20T表现亮眼。075型两栖攻击舰日前也搭载直-20...
蒋万安借“725上凯道”成蓝营... 中国国民党25日将于台北凯道举办“我是人,我反毒台”集会,向民进党当局抗议中联毒油案。对此,资深媒体...
波轮式全自动洗衣机脱水时波轮转 波轮式全自动洗衣机脱水时波轮转1、衣物放置不平导致;2、排水系统发生阻塞。3、顶部的安全开关损坏;4...
洗衣机不出水怎么查原因 当洗衣机不出水时,一定是出了问题。下面就是一些可能的原因及其解决方法:1. 电源问题洗衣机不能正常工...
半自动洗衣机放不出水是什么原因... 1、检查过滤网是否堵塞。若堵塞了需要将脏东西取出来,然后再用清水将过滤网清洗干净。2、检查一下是不是...
全自动洗衣机不出水是什么原因 1、进水口的滤网被水中的杂质堵住。2、控制板上的进水继电器坏了。3、电路故障,进水电磁阀有故障或者插...
抽油烟机只通电不转怎么回事 只通电不转的故障原因和解决方法:1、电容量减小或损坏。解决方法:抽油烟机电机不转,还有嗡嗡声,一般是...
谷歌被罚9亿欧元后,特朗普称欧... 当地时间7月23日,欧盟委员会指控美国谷歌公司违反欧盟《数字市场法》,对其处以8.9亿欧元罚款。这一...
14对14,中国反击欧盟,干净... 对于欧盟的指手画脚,中国第一时间反击了。14:14。干净利落,来而不往非礼也。国际博弈,从来如此:没...
风未到,人已行!凌晨不眠!一场... 7月24日晚,台风“红霞”持续逼近,市应急管理局五楼会议室灯火通明,市应急管理局党委书记、局长李见秋...