目录
Jenkins 是一个使用 java 开发、开源、免费、强大的 web 式持续集成应用程序;常用于开发者通过 git 等提交代码后自动化地构建、部署、测试程序。
下面我们直接切入正题,开始 Jenkins 的构建之旅
一、项目准备
安装包下载地址:https://www.jenkins.io/zh/download/,本次使用的是 Jenkins 2.319.1 LTS 版本,因为我是在 windows 上安装,所以下载时选择了 windows:
下载后,双击”jenkins.msi“进行安装,点击 Next 下一步:
选择安装目录,点击 Next 下一步
Logon Type 选择 Run service as LocalSystem,点击 Next 下一步
填写一个未被占用端口,点击 Test Port 测试端口是否可用,点击下一步:
选择 JDK 安装目录(JDK 请自行安装):
默认,下一步:
点击安装 Install,等待安装完成即可
安装完成后在浏览器访问:http://localhost:9081/,解锁 Jenkins
按说明,打开对应文件,把密码复制粘贴过来,点击继续
提示离线,我们先点跳过插件安装,进入管理员用户密码设置界面:
填写用户名、密码,点击保存并完成
直接访问 http://localhost:9081/pluginManager/available 安装插件,安装插件报错:
网上找到一个可用的解决办法,通过安装 skip-certificate-check 插件跳过证书检查,下载地址:
https://github.com/zhanghj07409/simple-jenkins/blob/master/plugins/skip-certificate-check.hpi。
访问 http://localhost:9081/pluginManager/advanced,
在 upload plugin 中选择已下载的 skip-certificate-check.hpi,点击 upload。
重启 Jenkins,点击 window 左下角开始,搜索“服务”,打开本地服务找到 Jenkins,鼠标右键,选择重新启动
访问 http://localhost:9081/pluginManager/available,重新安装插件,大部分插件都能安装成功,但还有部分插件安装失败,我们可以有针对性的解决单个插件安装失败的问题。
汉化,在插件管理里,选择 available 标签页,我们先安装以下两个插件 Locale 和 Localization: Chinese (Simplified)
然后打开 Configure System
找到 Locale 的设置里面。
这里我们设置的 zh_US。大家可能会有疑惑为什么是 zh_US,不是 zh_CN。
这个问题我没有深入,但是我设置 zh_CN 汉化还是没有成功,设置 zh_US 反而成功了。
原因不清楚,可能是 bug 或者什么吧。
设置完成后,我们可以到网页地址输入重启请求。
重启后,汉化就比较理想了
二、构建一个 maven 项目
Git软件可以从文末网盘下载
安装 maven 插件
Git 报错解决:OpenSSL SSL_read: Connection was reset, errno 10054 错误解决
打开 Git 命令页面,执行 git 命令脚本:修改设置,解除 ssl 验证
git config --global http.sslVerify "false"
下面这个错误可以通过“清理工作空间”解决:
清理工作空间:
构建成功:
备注,项目 git 地址:
github:https://github.com/zhanghj07409/simple-flowable.git
gitee:https://gitee.com/zhanghj07409/simple-flowable.git,本文后续均根据该开源项目,进行打包、编译、部署。
三、部署程序运行环境-安装 Linux 系统
1)、vagrant_2.2.19_x86_64.msi
2)、VirtualBox-6.1.30-148432-Win.exe
3)、CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
到官网 Downloads – Oracle VM VirtualBox 下载最新版的 Virtualbox,然后双击安装,一直点击确认完成。
官网 Downloads | Vagrant by HashiCorp 下载最新版的 Vagrant,然后双击安装,一直点击确认完成。
在 windows 下安装 vagrant,为了写入相应配置到环境变量,系统可能会要求重新启动。
安装完成后,在环境变量中 Path 增加 Vagrant 安装 bin 目录,如:“D:\tools\Vagrant\bin”。
在命令行中,输入 vagrant -v 查看 vagrant 版本信息:
box 是什么?接下来,我们需要选择使用何种操作系统,这里以 centos7 为例。
以前基于虚拟机的工作流,我们需要下载 ISO 镜像,安装系统,设置系统等操作。
而 Vagrant 开源社区提供了许多已经打包好的操作系统,我们称之为 box。你可以从 box 下载地址(下文列出),找到你想要的 box,当然你也可以自己制作一个。
box 下载地址官方镜像:Discover Vagrant Boxes - Vagrant Cloud
为了方便管理,我们把虚拟机统一放在一个文件夹下,这里我创建的目录为:E:\vmos,没有特殊要求,可以随意创建。
添加 box 镜像
命令:
vagrant box add centos7 D:\mygit\software\CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
命令中最好不要含有中文。
查看当前 box 列表,命令:vagrant box list
初始化 box,命令:vagrant init
初始化 box 的操作,在 vmos 目录会生成 vagrant 的配置文件 Vagrantfile。
打开刚刚生成的 Vagrantfile 文件,将内容修改如下:
#指定 vagrant 版本,默认为 2,不用修改
VAGRANTFILE_API_VERSION="2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#可循环创建几个相同配置的虚拟机
(1..1).each do |i|
#指定虚拟机的 hostname
config.vm.define vm_name="hbase#{i}" do |config|
config.vm.provider "virtualbox" do |v|
#虚拟机的一些配置,如:内存、CPU 等
v.customize ["modifyvm", :id, "--name", vm_name, "--memory","2048",'--cpus',2]
end
#指定所使用的 box 镜像名称
config.vm.box="centos7"
config.vm.hostname=vm_name
#指定要创建的虚拟机用户
config.ssh.username="vagrant"
#指定虚拟机的 IP 地址
config.vm.network :private_network, ip:"192.168.66.1#{i}"
end
end
end
上一步完成之后,接下来我们就可以启动创建所需要的虚拟机了。
命令:vagrant up
至此虚拟机已经创建成功了。
9、通过 SecureCRT 连接报错:All available gssapi mechanisms failed。
解决方法:
打开 Oracle VM VirtualBox,登录虚拟机,进入到根目录,打开 sshd_config 文件。
命令:vi /etc/ssh/sshd_config
找到 PasswordAuthentication 属性将 no 改为 yes
然后重启一下:service sshd restart
再使用 CRT 连接就可以连接上虚拟机了。
SecureCRT 可以正常连接登录了:
四、项目依赖软件安装
(1)安装
登录 Linux:
执行安装命令:yum install mariadb mariadb-server -y
查看安装版本:mysql -V
安装完成后启动 mariadb:
systemctl start mariadb
systemctl enable mariadb
(2)修改密码和设置远程登录权限
mysql -u root -p
提示输入密码,直接回车,执行下面脚本修改密码:
update mysql.user set password=password('vagrant') where User='root';
执行完成后刷新:
flush privileges;
查看用户信息:
select User, host from mysql.user;
设置远程访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'vagrant' WITH GRANT OPTION;
远程访问成功:
(3)修改 mariadb 不区分大小写:
vi /etc/my.cnf
按 i 进入编辑模式,在[mysqld]下新添加一行如下参数:
lower_case_table_names=1
保存编辑,重启 mariadb:
systemctl restart mariadb
(1)依赖插件安装
1)、安装 gcc-c++编译器
yum install gcc-c++
yum install -y openssl openssl-devel
2)、安装 pcre 包
yum install -y pcre pcre-devel
3)、安装 zlib 包
yum install -y zlib zlib-devel
(2)下载 Nginx,nginx-1.16.1.tar.gz:nginx: download
(3)linux 安装上传和下载插件:yum install lrzsz
安装完成后,切换到 opt 目录,并创建文件夹 nginx:
cd /opt
mkdir nginx
切换到 nginx 目录:cd nginx
执行上传命令:rz -y
选择下载的 Nginx 文件,双击,然后点击“OK”按钮
(4)解压和安装 Nginx
1)解压:tar -zxvf nginx-1.16.1.tar.gz
2)切换目录:cd nginx-1.16.1/
3)使用 nginx 默认配置:./configure
4)编译、安装:
make
make install
5)查找安装路径:whereis nginx
6)进入cd /usr/local/nginx/sbin
目录,可以看到有一个可执行文件 nginx,直接 ./nginx
执行就 OK 了
7)查看是否启动成功:ps -ef | grep nginx
8)然后在网页上访问虚拟机的 IP 就可以了,默认端口为 80(出现如下欢迎界面就成功了!)
(1)下载 redis,redis-6.2.6.tar.gz,下载地址:Redis
也可以通过命令:wget http://download.redis.io/releases/redis-6.2.6.tar.gz
下载,当然需要先安装 wget 插件:yum -y install wget
(2)切换到 opt 目录:cd /opt
,创建 redis 文件夹:mkdir redis
切换到 redis 目录:cd redis
执行上传命令:rz -y
选择下载的 redis 文件,双击,然后点击“OK”按钮
(3)解压并移动目录,解压:tar -zxvf redis-6.2.6.tar.gz
一般都会将 redis 目录放置到 /usr/local/redis 目录,移动 redis 目录:mv /opt/redis/redis-6.2.6 /usr/local/redis
(4)切换目录进行编译、安装:
cd /usr/local/redis
make
make PREFIX=/usr/local/redis install
(5)启动 redis
根据上面的操作已经将 redis 安装完成了。在目录/usr/local/redis 输入下面命令启动 redis
./bin/redis-server& ./redis.conf
(1)下载 jdk,jdk-8u311-linux-x64.tar.gz,下载地址:
(2)切换到 local 目录:cd /usr/local
执行上传命令:rz -y
选择下载的 jdk 文件,双击,然后点击“OK”按钮
(3)解压,解压:tar -zxvf jdk-8u311-linux-x64.tar.gz
解压成功后,可删除安装包:rm -f jdk-8u311-linux-x64.tar.gz
(4)配置 jdk 环境变量:vi /etc/profile
按 i 进入编辑,在 profile 文件尾部添加如下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_311
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
保存并退出编辑
通过命令 source /etc/profile 让 profile
文件立即生效
(5)查看安装是否成功:java -version
(1)下载 Tomcat,apache-tomcat-8.5.73.tar.gz,
下载地址:Apache Tomcat® - Apache Tomcat 8 Software Downloads
(2)切换到 local 目录:cd /usr/local
执行上传命令:rz -y
选择下载的 jdk 文件,双击,然后点击“OK”按钮
(3)解压,解压:tar -zxvf apache-tomcat-8.5.73.tar.gz
解压成功后,可删除安装包:rm -f apache-tomcat-8.5.73.tar.gz
(4)配置 tomcat 环境变量:vi /etc/profile
按 i 进入编辑,在 profile 文件尾部添加如下内容:
export CATALINA_HOME=/usr/local/apache-tomcat-8.5.73
保存并退出编辑
通过命令 source /etc/profile
让 profile 文件立即生效
(5)启动 tomcat:/usr/local/apache-tomcat-8.5.73/bin/startup.sh
启动成功后,浏览器访问:http://192.168.66.11:8080/
五、注册中心 eureka 构建
1、插件安装
Publish over SSH
2、系统配置-远程 linux 服务器信息配置
配置信息如下:
Remote Directory:
远程 linux 机器路径,用于存放编译打包文件。
如:/mnt/server_temp/simple-flowable(目录需事先在 linux 服务器创建好)
点高级,然后勾选 Use password authentication, or use a different key,输入密码:
点击 Test Configuration 测试连接是否成功:
3、由于构建 maven 项目,配置 SSH Publishers 时,Exec command 中配置的脚本,始终无法执行(尝试了很多办法都不行),因此改成构建流水线项目
4、构建流水线项目
(1)安装插件
a、安装 Git Parameter 插件:点击可选插件,在右上角输入 Git Parameter,找到 Git Parameter 后点击左下方的的直接安装
b、安装 Pipeline 插件:点击可选插件,在右上角输入 Pipeline,找到下面两个插件进行安装
(2)远程服务器创建目录
a、创建目录,存放编译打包文件:/mnt/server_temp/simple-flowable(上一步已创建可忽略)
b、创建目录,存放项目启动文件:/mnt/server/simple-flowable
(3)选择流水线
(4)编写 Pipeline 脚本,下面是 sim-eureka 单项目的部署脚本
重要点注释:
a、parameters,参数设置,choice(name: 'deploy_sit_env'
是设置选项参数,用于选择需要部署的服务器信息;
gitParameter 是 git 参数,配置后可以选择相应的分支进行打包。
该处配置的参数,在保存后,重新打开配置后,会自动生成下面两项:
另外,在任务界面,可以看到原来的“立即构建”按钮变成了“Build with Parameters”,点击,右边出来我们刚才配置的两个选项参数,一个是部署环境,一个是分支。
注意:第一次点击构建的时候 可能会没有 git parameter 选项,先使用的 master 分支,等构建完成之后再点击构建就会出现 git parameter 选项了。测试过新建 branch 也会第一时间更新,只有第一次的时候有点问题。
b、bat """ mvn clean install -Dmaven.test.skip=true -U
由于我 Jenkins 是安装在 Windows 上,所以 maven 命令是 bat,如果安装在 linux 系统,这里"bat"就要改成"sh"
c、transfers 里需要关注下面三个参数:
sourceFiles: 'sim-eureka/target/*.jar'
:来源文件,指 maven 编译好的文件;
removePrefix: 'sim-eureka/target'
:删除前缀,指拷贝到远程服务器时,需去除的目录;
remoteDirectory: 'sim-eureka'
:远程服务器目录,指拷贝到远程服务器的目录,这个目录是基于之前配置的“Remote Directory”目录“/mnt/server_temp/simple-flowable”下创建“sim-eureka”;
这三个参数组合的效果就是将 sim-eureka-1.0.0-SNAPSHOT.jar 转移到远程服务器的 /mnt/server_temp/simple-flowable/sim-eureka 目录下。
d、execCommand:执行脚本
pipeline
{
agent any
tools {
maven 'apache-maven-3.0.4'
}
parameters {
choice(name: 'deploy_sit_env'
, choices: ['sit-11']
, description:
'===========\n 测试部署环境:\n '
+ 'test-server (192.168.66.11) \n'
+'===========\n\n\n'
)
gitParameter name: 'simple_flowable',
type: 'PT_BRANCH',
branchFilter: 'origin/(.*)',
defaultValue: 'master',
selectedValue: 'DEFAULT',
sortMode: 'DESCENDING_SMART',
// listSize: '50',
quickFilterEnabled: true,
description: 'Select your branch for simple-flowable.git.'
}
stages {
stage("check out sim-eureka"){
steps {
dir("sim-eureka"){
script {
checkout([$class: 'GitSCM',
branches: [[name: "${params.simple_flowable}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://gitee.com/zhanghj07409/simple-flowable.git']]
])
}
bat """
echo "[INFO] build simple-flowable start"
mvn clean install -Dmaven.test.skip=true -U
echo "[INFO] build simple-flowable finish"
echo "[INFO] deploy simple-flowable start"
"""
sshPublisher(
publishers: [
sshPublisherDesc(configName: "${params.deploy_sit_env}" ,
transfers: [sshTransfer(cleanRemote: false, excludes: '',
execTimeout: 120000, flatten: false, makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
sourceFiles: 'sim-eureka/target/*.jar',
removePrefix: 'sim-eureka/target',
remoteDirectory: 'sim-eureka',
remoteDirectorySDF: false,
execCommand: '''cd /mnt/server/simple-flowable/sim-eureka
rm -rf sim-eureka-1.0.0-SNAPSHOT.jar.back
sh stop.sh
mv sim-eureka-1.0.0-SNAPSHOT.jar sim-eureka-1.0.0-SNAPSHOT.jar.back
mv /mnt/server_temp/simple-flowable/sim-eureka/sim-eureka-1.0.0-SNAPSHOT.jar /mnt/server/simple-flowable/sim-eureka/
pwd
source /etc/profile
nohup sh /mnt/server/simple-flowable/sim-eureka/start.sh &
''')
],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
echo "[INFO] deploy sim-eureka finish"
}
}
}
}
}
start.sh 内容如下:
#!/bin/sh
source /etc/profile
var=`find . -name sim-eureka-1.0.0-SNAPSHOT.jar`
fname=${var##*/}
nohup java -jar -Xms256M -Xmx256M -Xmn64M ${fname} >>nohup.out 2>&1& echo $! > service.pid
stop.sh 内容如下:
#!/bin/sh
pid=$(cat service.pid)
kill -9 $pid
rm -rf service.pid
(6)构建成功后,可浏览器访问 eureka:
访问 eureka:http://192.168.66.11:8081/ 用户名/密码:admin/admin
六、微服务构建
1、数据库导入
a、由于程序中数据库连接我使用的是 flowable 用户,为了方便,先创建该用户:
create user`flowable`@`*` identified by'flowable';
grant all privileges on *.* to 'flowable'@'%' identified by 'flowable';
flush privileges;
b、创建数据库 flowable
c、下载基础库 flowable:
simple-flowable: flowable工作流引擎企业应用 - Gitee.com
d、在 mysql 客户端 Navicat,基于 flowable 数据库新建查询,复制脚本执行:
执行成功后一共 68 个表:
2、远程服务器创建目录,上传启停脚本
在 /mnt/server/simple-flowable/ 目录下创建 sim-basic、sim-flowable-modeler、sim-gateway、sim-flowable-web 目录(sim-eureka 之前已创建):
选择对应启停脚本上传:
3、sim-basic 服务构建
在之前 eureka 的 pipeline 脚本基础上追加如下内容:
sshTransfer(cleanRemote: false, excludes: '',
execTimeout: 120000, flatten: false, makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
sourceFiles: 'sim-basic/target/*.jar',
removePrefix: 'sim-basic/target',
remoteDirectory: 'sim-basic',
remoteDirectorySDF: false,
execCommand: '''cd /mnt/server/simple-flowable/sim-basic
rm -rf sim-basic-1.0.0-SNAPSHOT.jar.back
sh stop.sh
mv sim-basic-1.0.0-SNAPSHOT.jar sim-basic-1.0.0-SNAPSHOT.jar.back
mv /mnt/server_temp/simple-flowable/sim-basic/sim-basic-1.0.0-SNAPSHOT.jar /mnt/server/simple-flowable/sim-basic/
pwd
source /etc/profile
nohup sh /mnt/server/simple-flowable/sim-basic/start.sh &
''')
4、sim-flowable-modeler、sim-gateway、sim-flowable-web 服务构建
在之前的 pipeline 脚本基础上追加如下内容:
sshTransfer(cleanRemote: false, excludes: '',
execTimeout: 120000, flatten: false, makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
sourceFiles: 'sim-flowable-modeler/target/*.jar',
removePrefix: 'sim-flowable-modeler/target',
remoteDirectory: 'sim-flowable-modeler',
remoteDirectorySDF: false,
execCommand: '''cd /mnt/server/simple-flowable/sim-flowable-modeler
rm -rf sim-flowable-modeler-1.0.0-SNAPSHOT.jar.back
sh stop.sh
mv sim-flowable-modeler-1.0.0-SNAPSHOT.jar sim-flowable-modeler-1.0.0-SNAPSHOT.jar.back
mv /mnt/server_temp/simple-flowable/sim-flowable-modeler/sim-flowable-modeler-1.0.0-SNAPSHOT.jar /mnt/server/simple-flowable/sim-flowable-modeler/
pwd
source /etc/profile
nohup sh /mnt/server/simple-flowable/sim-flowable-modeler/start.sh &
'''),
sshTransfer(cleanRemote: false, excludes: '',
execTimeout: 120000, flatten: false, makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
sourceFiles: 'sim-gateway/target/*.jar',
removePrefix: 'sim-gateway/target',
remoteDirectory: 'sim-gateway',
remoteDirectorySDF: false,
execCommand: '''cd /mnt/server/simple-flowable/sim-gateway
rm -rf sim-gateway-1.0.0-SNAPSHOT.jar.back
sh stop.sh
mv sim-gateway-1.0.0-SNAPSHOT.jar sim-gateway-1.0.0-SNAPSHOT.jar.back
mv /mnt/server_temp/simple-flowable/sim-gateway/sim-gateway-1.0.0-SNAPSHOT.jar /mnt/server/simple-flowable/sim-gateway/
pwd
source /etc/profile
nohup sh /mnt/server/simple-flowable/sim-gateway/start.sh &
'''),
sshTransfer(cleanRemote: false, excludes: '',
execTimeout: 120000, flatten: false, makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
sourceFiles: 'sim-flowable-web/target/*.war',
removePrefix: 'sim-flowable-web/target',
remoteDirectory: 'sim-flowable-web',
remoteDirectorySDF: false,
execCommand: '''cd /mnt/server/simple-flowable/sim-flowable-web
rm -rf sim-flowable-web-1.0.0-SNAPSHOT.war.back
sh stop.sh
mv sim-flowable-web-1.0.0-SNAPSHOT.war sim-flowable-web-1.0.0-SNAPSHOT.war.back
mv /mnt/server_temp/simple-flowable/sim-flowable-web/sim-flowable-web-1.0.0-SNAPSHOT.war /mnt/server/simple-flowable/sim-flowable-web/
pwd
source /etc/profile
nohup sh /mnt/server/simple-flowable/sim-flowable-web/start.sh &
''')
5、修改 Tomcat 配置:
vi /usr/local/apache-tomcat-8.5.73/conf/server.xml
在 Host 中添加下面内容:
如下(我是在本地电脑修改好上传到 linux 机器的):
6、修改 Nginx 配置:
vi /usr/local/nginx/conf/nginx.conf
将内容修改如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type weblication/octet-stream;
sendfile on;
keepalive_timeout 300s 600s;
client_max_body_size 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass http://127.0.0.1:8080/web/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_cookie_path /web/ /;
proxy_cookie_path /gateway/ /;
}
location /web/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080/web/;
proxy_cookie_path /web/ /;
}
location /gateway/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://localhost:8082/;
proxy_cookie_path /gateway/ /;
}
}
}
启动 Nginx:
进入 cd /usr/local/nginx/sbin 目录,可以看到有一个可执行文件 nginx,直接./nginx 执行就 OK 了(如果进程已存在,则找到该进程 kill 掉,再启动)。
7、Jenkins 点击“Build with Parameters”开始构建,构建成功后可访问项目:
web前端:http://192.168.66.11/ 用户名/密码:admin/test
登录成功,进入首页:
8、所用脚本和工具下载:
百度网盘链接:百度网盘 请输入提取码
提取码:y9ml
linux安装软件:linux.rar
simple-jenkins.rar 包目录如下:
9、问题交流可以加我 QQ:821336262
10、本文在gitchat也有发布:基于 Jenkins+Git+Maven 构建 Spring Cloud 微服务实战_GitChat