千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,jenkins持续集成看我如何从1到代码自动化部署背景近期由于工作原因需要学习jenkins持续化集成。对于一个好学又帅气的我来说。学习他还不是手到擒来。公司为一个中小型创业公司,在部署代码上面,很少
千家信息网最后更新 2026年11月02日jenkins持续集成--看我如何从1到代码自动部署

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、新建任务

2、输入任务名称-选择-选择流水线-确定

简要介绍一下这几个项目的优缺点

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

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

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

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

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

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

点击高级,创建 Secret token


4、gitlab上添加步骤3 的webhook

在url处填写webhook;Secret Token处填写步骤三随机生成的字符串。完成过,点击添加即可。

在这里可以进行测试连通性。
注意到这里的时候,你可能会遇到一个问题:有些用户添加的时候会报这样一个错误,

说是不允许本地网络请求。这是由于新版本安全性的问题造成的,非常容易解决!
解决方法:使用gitlab管理员账户登陆。

将那两个全部勾选。然后回去重新添加即可。
5、编写pipeline脚本

这里有两个选择,第一个是在这里直接写入脚本(温馨提示,脚本在自己电脑上的编辑器上写好粘贴到这里,因为这里的编辑器像吃了翔一样难用!太难了。。。)第二个是使用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流水线目前的 状态/进展.

可能这句话不太形象(我第一次看官文也是蒙蔽),来张图

其中最后一个是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)、点击流水线语法

(2)、从实例步骤中选择sh:shell script。在文本框输入需要生成的shell命令,

(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运行情况
点击立即构建

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


钉钉消息

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

代码 状态 环境 流水 流水线 服务 脚本 语法 需求 测试 程序 程序员 项目 成功 插件 生成 配置 两个 信息 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 涨乐互联网科技 智网互联网科技 远拓互联网科技 互联网科技公司有哪些 佰商互联网科技有限公司 互联网科技股有哪些 中盈科技互联网信息有限公司 互联网科技与管理 厦门千工互联网科技有限公司 江阴互联网智能科技产品进口 银川新华互联网科技学校联系电话 乌苏新华互联网科技做什么的 南通创西澳互联网科技有限公司 江苏苏星互联网科技有限公司 神州科技互联网有限公司 上海乐五互联网科技有限公司 容联科技互联网电商 万物互联网智能科技 深圳互联网科技园地址 株洲百竞科技的互联网营销顾问 上海挚品互联网科技有限公司 互联网科技公司简介 伟宏互联网科技 互联网科技工作委员会 无线互联网科技 昭通云南众福互联网科技有限公司 电子商务与互联网科技的关系 广东工业互联网大赛深圳学泰科技 互联网领先科技宣传片 黑龙江互联网科技公司
0