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 [email protected]*.*.*.* "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  [email protected]*.*.*.* "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运行情况
点击立即构建

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


钉钉消息

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

原文地址:https://blog.51cto.com/12332766/2460393

时间: 2024-10-12 07:41:29

jenkins持续集成--看我如何从1到代码自动部署的相关文章

Jenkins 持续集成平台构建之通过git提交代码

一.概述 上一篇文章介绍了Jenkins结合svn来构建jar包,本文介绍另一种代码提交的方式git,并结合maven来构建代码包. 实验环境: IP: 10.0.90.27 系统: Centos6.6 x86_64 软件包: Jenkins  2.9 Tomcat   8.0.36 JDK      8.92 maven    3.3.9 git 二.安装步骤 1.安装jdk #rpm -ivh jdk-8u92-linux-x64.rpm  Preparing...             

12.Jenkins持续集成企业实战

阅读目录: Jenkins持续集成企业实战1.1 目前主流网站部署的流程1.2 Jenkins持续集成简介1.3 Jenkins持续集成组件1.4 Jenkins平台安装部署1.5 Jenkins相关概念1.6 Jenkins平台设置1.7 Jenkins构建JOB工程1.8 Jenkins自动化部署1.9 Jenkins插件安装1.10 Jenkins邮件配置1.11 Jenkins多实例配置1.12 Jenkins+Ansible高并发构建 Jenkins持续集成企业实战 构建企业自动化部署

Jenkins持续集成学习及企业级应用

文档声明 该文档主体为去年末自主学习时总结,旨在为我司提供一套企业级持续集成解决方案.这篇文章现在看上去很稚嫩,但是当时花费了许多心血.希望将当时的学习心得拿出来与大家交流.该文档主要说明了jenkins持续集成部署的相关步骤,并着重实现了权限分组,邮件配置,插件配置的jenkins实现过程.对出现的问题进行解决,是一套持续集成的解决方案. 持续集成Continuous integration 提出 针对复杂度高的项目提出“早集成,常集成,频繁集成”来帮助项目在早期发现项目风险和质量问题 作用

基于Jenkins持续集成CI

持续集成强调开发人员提交了新代码之后,立刻进行构建.(单元)测试.根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起. 持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中.比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试.如果代码没有问题,可以继续手动部署到生产环境中 持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化. 集成:是指软件个人研

Jenkins 持续集成使用教程

Jenkins 持续集成使用教程 用 jenkins 有什么好处 通过规范化来完成,简单,繁琐,浪费时间的重复工作 规范化工作,以免出现低级错误 实现随时随地任何人一键构建 ...... 安装 jenkins 以 Mac 设备为例(Windows 步骤类似),帮你一步一步搭建好 jenkins.jenkins 属于 java 项目 依赖于 java,需要先安装 java jdk,具体安装方式请自行百度. 安装 jenkins 有常用的三种方式. 使用 pgk 安装包安装 在 官网 下载 pgk

Linux-GitLab+Jenkins持续集成+自动化部署

GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译.发布.自动化测试)来验证,从而尽快地发现集成错误.许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件. (2)没有持续集成 项目做模块集成的时候,发现很多接口都不通==>浪费大量时间 需

python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?

python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windows的服务了,那么jenkins是计算机服务理的一个后台服务,所以跑cases 的时候不显示浏览器 解决办法:1.我们需要关掉jenkins后台服务,让他从cmd(dos窗口)启动,类似于tomcat的手动启动下面的方法适合不用tomcat的同学(注意,用也可以配置好Tomcat放在webapp下启

jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安装方式(在线安装需要连接VPN你懂的),如下图 重启后即可看到git按钮: 2.jenkins持续集成时,点击构建失败无法找到git.exe解决办法如下图: 控制台输出提示构建失败git.exe rev-parse --is-inside-work-tree # timeout=10:原因是没有找到

3、Jenkins持续集成之持续集成

3.Jenkins持续集成之持续集成.md 配置ansible实现无密钥交互 安装阿里云YUM源码 [[email protected] ~]# cat <<EOF>>/etc/yum.repos.d/epel.repo [epel] name=epel for aliyun baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=1 gpgcheck=0 [os] name=os for aliyun baseurl=h