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

发布时间:2024-08-22 点击:105
系统运维
jenkins持续集成看我如何从1到代码自动化部署
背景
近期由于工作原因需要学习jenkins持续化集成。对于一个好学又帅气的我来说。学习他还不是手到擒来。公司为一个中小型创业公司,在部署代码上面,很少用gitlab、jenkins等等,也没有清晰的生产环境-测试环境-线上环境之分。唯一有的就是写完代码-登陆服务关闭服务,上传代码-开启服务。这样往往会到来很多问题,同时也会给程序员带来很多繁琐的工作。这不,公司内部整顿,需要一套清晰的流程,而且为了减轻程序员的负担,于是就希望采用gitlab jenkins来部署代码。
需求
程序员通过提交代码到gitlab上;触发jenkins自动部署触发器;部署到测试服务器,如果正常,提交到正式线上环境
环境介绍
ubuntu18.04 :
网络:内网环境 服务:gitlab环境ubuntu16.04:
网络:内网环境 服务:jenkinscentos 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
类似于py

广东服务器厂商云主机价格
解决织梦DedeCms安全问题的方法
Gartner:6个容器和Kubernetes策略的最佳实用技巧
邮箱收到这个邮件买了域名
日本网站云服务器
麻烦帮忙看一下资料是否合格如果不合格我这边好尽快让客户处理
原来的服务器-云服务器问题
中小企业应怎样才能做好一个营销型的网站?