Jenkins部署资料

 

前言:

    为弥补walle自动部署工具在自动化部署代码上的缺陷,慢且容易部署失败,则改用jenkins来替代walle作为公司的代码上线工具,目前jenkins只是实现了简单的代码发布及回滚的操作,还需更一步完善。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

1.Jenkins简介 

1.1.jenkins描述  

2.1.jenkins流程图  

2.1.jenkins依赖  

2.Jenkins安装 

2.1.下载jenkins   

2.2.运行jenkins   

3.配置系统环境 

3.1.配置JDK、git、maven、nodejs  

3.2.安装系统插件 

4.项目发布准备工作 

4.1.在jenkins服务器生成密钥  

4.2.将密钥添加至目标服务器及测试  

4.3.将目标服务器添加到jenkins中  

5.项目发布及回滚 

5.1.新建项目  

5.2.添加参数化构建过程  

5.3.添加源码管理  

5.4.添加构建环境  

5.5.添加构建步骤Execute shell 

5.5.1.服务器中创建相关目录  

5.5.2.配置目录权限   

5.5.3.添加项目发布及回滚脚本  

5.6.构建后操作  

6.最终发布效果图 

 

 

 

 

 

 

 



 

1.Jenkins简介

1.1 Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能
Jenkins
是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:
1
、持续的软件版本发布/测试项目。
2
、监控外部调用执行的工作。

1.2 jenkins流程图

image.png                                                                         image.png

回滚机制                                                        jenkins发布流程


1.3 Jenkins
相关组件

1.首先保证系统中已经安装了jdk

2.安装git拉取代码

3.安装nodejs编译js代码

4.安装maven打包java代码

5.tomcat用于运行jenkins



 

 

 

2.Jenkins安装

2.1官网下载地址:http://mirrors.jenkins.io/war-stable/latest/jenkins.war

放置  /usr/local/tomcat/webapps   目录下

2.2第一种启动方法:
切换到jenkins.war存放的目录,输入如下命令:

1

java -jar jenkins.war  


然后在浏览器中输入localhost:8080localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins
第二种方法是:用tomcat打开,将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,
会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址于上一种方法有点不一样,
输入:serverIP:8080/jenkins

启动tomcat,浏览输入serverIP:8080/jenkinsWindows环境下。

image.png

 

初始的管理员密码,jenkins自动生成的,根据上面红色的路径找到密码,拷到下面的输入框中。

spacer.gif

 

安装插件,可以默认的安装,也可以自己选择,(jenkins配置好后也可以安装插件)选择默认。

image.png

image.png

 

完了以后到创建用户

image.png

 

完了以后进入jenkins的主页


 image.png

 

3.配置系统环境

3.1"系统管理"---->"Global Tool Configuration" 配置 jdk maven等信息

image.png

image.png

 

3.2插件
点击系统管理” --→管理插件

image.png

 

出现以下界面

image.png

 

选择可选插件

 安装以下插件 

Publish Over SSH Plugin(通过ssh发布代码)

Maven Integration(用于构建Maven项目)

Deploy to container(则是用于发布远程war包)

GitLab Plugingitlab管理 插件)

Git client plugingit客户端插件)

GitLab Hook Plugin(自动触发构建)

Git plugin(版本管理 GIT 的插件)

SonarQube Plugin(代码质量检测)

Nodejs pluginnodejs管理插件)

最后点击 Download now and install after restart:

 

其他实用插件

·        iOS专用:Xcode integration

·        Android专用:Gradle plugin

·        Gitlab插件:GitLab Plugin Gitlab Hook Plugin

·        Git插件: Git plugin

·        GitBuckit插件: GitBuckit plugin

·        签名证书管理插件: Credentials Plugin Keychains and Provisioning Profiles Management

·        FTP插件: Publish over FTP

·        脚本插件: Post-Build Script Plug-in

·        修改Build名称/描述(二维码) build-name-setter / description setter plugin

·        获取仓库提交的commit log Git Changelog Plugin

·        自定义全局变量: Environment Injector Plugin

·        自定义邮件插件: Email Extension Plugin

·        获取当前登录用户信息: build-user-vars-plugin

·        显示代码测试覆盖率报表: Cobertura Plugin

·        来展示生成的单元测试报表,支持一切单测框架,如junitnosetests等: Junit Plugin

·        其它: GIT plugin / SSH Credentials Plugin

 

4.项目发布准备工作   

 

首先架构情况为gitlabjenkins及业务服务器都是买的云服务器且独立,所以要在本地打包,接着通过jenkinsSend build artifacts over SSH插件上传到其他业务服务器 

在使用Publish Over SSH之前,需要制作SSH私钥。机器间做免密登录配置。

jenkins机器A,ip为192.168.1.1,机器B: 192.168.1.2,机器A能够免密登录机器B,机器B能够免密登录机器A,制作方式是:

 

4.1jenkins  A服务器执行

 

cd ~

ssh-keygen -t rsa

生成密钥

4.2将生成的公钥添加到需要发布的业务服务器的特定用户的.ssh/authorized_keys文件中

这里我添加到www用户下

测试是否能够远程登录

ssh  www@192.168.1.2


4.3在系统配置中配置Publish Over SSH

进入Jenkins—>系统管理—>系统设置,配置Publish over SSH 


image.png

image.png

 

5.项目发布及回滚

5.1新建项目

image.png

5.2添加参数化构建过程

项目描述


image.png

image.png

 

 

5.3添加源码管理

image.png

5.4添加构建环境(根据实际情况选择,此为nodejs的构建环境)

image.png

5.5添加构建步骤Execute shell

5.5.1服务器中创建相关目录

用于创建放置发布代码的目录,

发布的目录为/data/wwwroot/admin.hejunedu.com

这里做软连接,发布代码时切换软连接就可以降低对线上业务的影响。

代码存放目录为/data/wwwroot/code/admin.hejunedu.com/hejun.edu.web.backend-1  

(最后一个目录为变量的发布代码的目录)

mkdir  -p  /data/wwwroot/code/admin.hejunedu.com

5.5.2更改为启动nginx的用户

chown  -R  www:www   /data/wwwroot/code/admin.hejunedu.com

5.5.3添加发布及回滚脚本

case $Status in

       Deploy)

           echo "Status:$Status"

        cnpm i

              npm run build:prod

        cd ${WORKSPACE}

        tar -czf ${JOB_NAME}-${BUILD_NUMBER}.tar.gz  ./dist  ##--exclude=dist

        find ${WORKSPACE} -mtime 2 -name "*.tar.gz" -exec rm -rf {} \;

        echo "Completion!!!"

        ;;

 ROLLBACK)

             echo "Status: $Status"

        echo "version: $Version"

        file_old=`ls ${WORKSPACE} | grep $Version`

        cd ${WORKSPACE}

        cp -R $file_old ${JOB_NAME}-${BUILD_NUMBER}.tar.gz

        ;;

      *)

      exit

      ;;

      Esac

image.png

 

这里 ${WORKSPACE}${JOB_NAME}${BUILD_NUMBER}都是jenkins内置变量,这里我把官网的翻译贴出来:

BUILD_NUMBER 
当前版本号,例如:153 
JOB_NAME 
此版本的项目名称 
WORKSPACE 
作为工作空间分配给构建目录的绝对路径。

脚本具体内容不难,就是如果选择“Deploy”就执行创建文件夹(用于保存压缩后的文件),然后执行压缩文件,后面我加了一个超过设定时间,就删除文件的句子。因为怕文件太多,占用空间。 
如果选择”RollBACK”,获取到要回滚的BUILD_NUMBER,查找到文件内容包含 BUILD_NUMBER的压缩文件,我就把这个文件复制成为最新的构建文件。

5.6添加构建后操作

用于把本地压缩好的文件上传到业务服务器上并执行相关解压、软连接等操作。

image.png

Source files${JOB_NAME}-${BUILD_NUMBER}.tar.gz

Remote directory./code/admin.hejunedu.com

Exec command

cd /data/wwwroot/code/admin.hejunedu.com

find /data/wwwroot/code/admin.hejunedu.com/  -mtime +10  -name "*.*" -exec rm -rf {} \;

mkdir  ${JOB_NAME}-${BUILD_NUMBER}

tar zxvf  ${JOB_NAME}-${BUILD_NUMBER}.tar.gz     -C  ./${JOB_NAME}-${BUILD_NUMBER}

cd /data/wwwroot/admin.hejunedu.com

ln -sfn /data/wwwroot/code/admin.hejunedu.com/${JOB_NAME}-${BUILD_NUMBER}/   /data/wwwroot/admin.hejunedu.com

最后就是把压缩好的文件上传到云服务器上,并解压到指定目录。根据项目需求执行相关操作

6.最终效果图如下:

image.png


脚本内容根据实际情况更改,此发布过程也许较为复杂,但是还是没问题的,如果遇到什么问题可以加  微信交流:wsq94125

互相学习,后面会对jenkins更加完善一些(邮件通知,webhook等)。