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流程图
回滚机制 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:8080,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins
第二种方法是:用tomcat打开,将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,
会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址于上一种方法有点不一样,
输入:serverIP:8080/jenkins。
启动tomcat,浏览输入serverIP:8080/jenkins。Windows环境下。
初始的管理员密码,jenkins自动生成的,根据上面红色的路径找到密码,拷到下面的输入框中。
安装插件,可以默认的安装,也可以自己选择,(jenkins配置好后也可以安装插件)选择默认。
完了以后到创建用户
完了以后进入jenkins的主页
3.配置系统环境
3.1"系统管理"---->"Global Tool Configuration" 配置 jdk 、maven等信息
3.2插件
点击 “系统管理” --→管理插件
出现以下界面
选择“可选插件”
安装以下插件
Publish Over SSH Plugin(通过ssh发布代码)
Maven Integration(用于构建Maven项目)
Deploy to container(则是用于发布远程war包)
GitLab Plugin(gitlab管理 插件)
Git client plugin(git客户端插件)
GitLab Hook Plugin(自动触发构建)
Git plugin(版本管理 GIT 的插件)
SonarQube Plugin(代码质量检测)
Nodejs plugin(nodejs管理插件)
最后点击 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
· 来展示生成的单元测试报表,支持一切单测框架,如junit、nosetests等: Junit Plugin
· 其它: GIT plugin / SSH Credentials Plugin
4.项目发布准备工作
首先架构情况为gitlab和jenkins及业务服务器都是买的云服务器且独立,所以要在本地打包,接着通过jenkins的Send 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.1在jenkins 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
5.项目发布及回滚
5.1新建项目
5.2添加参数化构建过程
项目描述
5.3添加源码管理
5.4添加构建环境(根据实际情况选择,此为nodejs的构建环境)
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
这里 ${WORKSPACE}、${JOB_NAME}、${BUILD_NUMBER}都是jenkins内置变量,这里我把官网的翻译贴出来:
BUILD_NUMBER
当前版本号,例如:153
JOB_NAME
此版本的项目名称
WORKSPACE
作为工作空间分配给构建目录的绝对路径。
脚本具体内容不难,就是如果选择“Deploy”就执行创建文件夹(用于保存压缩后的文件),然后执行压缩文件,后面我加了一个超过设定时间,就删除文件的句子。因为怕文件太多,占用空间。
如果选择”RollBACK”,获取到要回滚的BUILD_NUMBER,查找到文件内容包含 BUILD_NUMBER的压缩文件,我就把这个文件复制成为最新的构建文件。
5.6添加构建后操作
用于把本地压缩好的文件上传到业务服务器上并执行相关解压、软连接等操作。
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.最终效果图如下:
脚本内容根据实际情况更改,此发布过程也许较为复杂,但是还是没问题的,如果遇到什么问题可以加 微信交流:wsq94125
互相学习,后面会对jenkins更加完善一些(邮件通知,webhook等)。