Linux(centos7)搭建Jenkins自动构建Springboot项目及vue前端项目

Linux(centos7)搭建Jenkins自动构建Springboot项目及vue前端项目一、环境准备 安装Java环境安装git环境安装maven环境安装nodejs环境Linux - 配置SSH免密通信 - “ssh-keygen”的基本用法二、安装jenkins 与配置安装jenkins启动jenkins安装扩展插件Jenkins全局配置maven配置JDKGit配置MavenNodeJS三、构建项目构建SpringBoot项目新建maven项目添加Credentials源码管理构建环境BuildPost Stepsshell脚本编写逻辑shell脚本开始构建-启动构建vue前端项目构建Freestyle project构建环境Build/构建Shell 脚本开始构建-启动四、自动构建-码云HookGitee配置 项目Gitee连接配置配置构建触发器生成Hook密码设置gitee项目-webHooks五、自动构建-Gitea HookGitea Servers 配置新建 gitea Access Tokens关闭 CSRF 验证修改授权策略项目配置 构建触发器配置gitea web钩子常见问题


一、环境准备

安装Java环境

传送门:Linux(centos7)环境下配置jdk1.8 - d2pc - OSCHINA - 中文开源技术交流社区

安装git环境

传送门:Linux(centos7)安装Git - d2pc - OSCHINA - 中文开源技术交流社区

安装maven环境

传送门:Linux(centos7)环境下配置maven3.6 - d2pc - OSCHINA - 中文开源技术交流社区

安装nodejs环境

传送门:Linux(centos7)环境配置nodejs 安装及环境配置 - d2pc - OSCHINA - 中文开源技术交流社区

Linux - 配置SSH免密通信 - “ssh-keygen”的基本用法

传送门:Linux - 配置SSH免密通信 - “ssh-keygen”的基本用法 - d2pc - OSCHINA - 中文开源技术交流社区

---------------------------下面正片环节---------------------------

二、安装jenkins 与配置

安装jenkins

教程以:jenkins 2.316 版本为例子

最新版本下载地址:Index of /war/latest


wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war


下载指定版本:Index of /war


mkdir /usr/local/jenkins
 cd /usr/local/jenkins
 wget http://mirrors.jenkins-ci.org/war/2.316/jenkins.war


启动jenkins

通过java -jar来启动项目,因为jenkins.war包里面已经内置了jetty服务器,可以直接启动,通过--httpPort来指定启动端口,添加&表示以服务形式启动。


java -jar jenkins.war --httpPort=8090 &


启动后,控制台显示密码

*************************************************************
 *************************************************************
 *************************************************************
 
 Jenkins initial setup is required. An admin user has been created and a password generated.
 Please use the following password to proceed to installation:
 
 1b246b95184d448282fde671d241998a
 
 This may also be found at: /root/.jenkins/secrets/initialAdminPassword
 
 *************************************************************
 *************************************************************
 *************************************************************

接下来打开 http://ip:8090/ 即可。然后输入对应的用户密码,解锁

jenkins 实现自动化部署 需要哪些必要插件_Jenkins

如果忘记密码也可以通过 查看文件


 cat /root/.jenkins/secrets/initialAdminPassword


新手推荐使用默认插件安装

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_02

安装完成后,创建管理员用户密码,直接走入系统

安装扩展插件

安装扩展插件,Springboot+vue项目需要用到git,maven,nodejs等插件,所以先安装对应插件,

打开Manager Jenkins -> Manage Plugins -> Available (可选插件)

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_03

插件列表

目前springboot项目代码是保存在gitee,vue项目是保存在gitea,所以需要安装对应插件

jenkins 实现自动化部署 需要哪些必要插件_git_04

jenkins 实现自动化部署 需要哪些必要插件_git_05

Jenkins全局配置

打开Manager Jenkins -> Global Tool Configuration 这里需要配置jdk,maven,git及nodejs环境变量

maven配置

配置settings.xml信息


 /usr/local/maven/apache-maven-3.6.3/conf/settings.xml


jenkins 实现自动化部署 需要哪些必要插件_Jenkins_06

JDK

别名:jdk1.8.0_231 JAVA_HOME:/usr/local/jdk1.8.0_231

jenkins 实现自动化部署 需要哪些必要插件_git_07

Git配置

Name:git-2.9.0 Path to Git executable:/usr/local/bin/git

jenkins 实现自动化部署 需要哪些必要插件_git_08

Maven

Name:maven-3.6.3 MAVEN_HOME:/usr/local/maven/apache-maven-3.6.3

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_09

NodeJS

Name:node-v12.14.1 安装目录:/usr/local/nodejs/node-v12.14.1

jenkins 实现自动化部署 需要哪些必要插件_jenkins_10

三、构建项目

构建SpringBoot项目

新建maven项目

打开 新建Item -> 构建一个maven项目 ,输入名称,确定,进入配置面,源码管理

  • 配置Repository URL,这里以 gitee 源码为例
  • 配置Credentials,因为项目不是开源项目,需要提供验证账号

添加Credentials

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_11

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_12

源码管理

这里我只打包开发分支,如果是别的分支,写上对应名称即可,如:*/mater

jenkins 实现自动化部署 需要哪些必要插件_git_13

构建环境

添加构建过程控制台输出时间和日志

jenkins 实现自动化部署 需要哪些必要插件_jar_14

Build

Goals and options,指定打包激活的环境

clean install -Dmaven.test.skip=true -P dev

Post Steps

经过上面步骤之后,系统会构建项目到 /root/.jenkins/workspace/ 目录 我们通过shell脚本来更新文件然后重启项目

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_15

shell脚本编写逻辑

  • 新建一个目录,先把打包好的jar统一放在此目录,再通过此目录进去统一替换项目的jar
  • 停止应用,准备文件替换
  • 统一替换项目文件,远程服务器通过scp 方式
  • 启动应用信息

 mkdir -p /home/deploy/develop/lib/


shell脚本


 #!/bin/bash  echo "切换到打包目录"  cd /root/.jenkins/workspace/jeecgboot-develop  echo "开始复制微服模块,采用 \cp 命令不提示覆盖"    \cp ./jeecg-cloud-module/jeecg-cloud-gateway/target/jeecg-cloud-gateway-2.4.0.jar /home/deploy/develop/  \cp ./jeecg-cloud-module/jeecg-cloud-monitor/target/jeecg-cloud-monitor-2.4.0.jar /home/deploy/develop/  \cp ./jeecg-cloud-module/jeecg-cloud-system-start/target/jeecg-cloud-system-start-2.4.0.jar /home/deploy/develop/  \cp ./jeecg-cloud-module/jeecg-cloud-demo/target/jeecg-cloud-demo-2.4.0.jar /home/deploy/develop/  \cp ./jeecg-cloud-module/jeecg-cloud-xxljob/target/jeecg-cloud-xxljob-2.4.0.jar /home/deploy/develop/  \cp ./jeecg-cloud-module/jeecg-cloud-quartz/target/jeecg-cloud-quartz-2.4.0.jar /home/deploy/develop/  \cp ./jeecg-cloud-module/jeecg-cloud-supplier/target/jeecg-cloud-supplier-2.4.0.jar /home/deploy/develop/    echo "开始各微服模块引用的lib类库,采用 \cp -r 命令不提示覆盖"  \cp -r ./jeecg-cloud-module/jeecg-cloud-gateway/target/lib/ /home/deploy/develop/  \cp -r ./jeecg-cloud-module/jeecg-cloud-monitor/target/lib/ /home/deploy/develop/  \cp -r ./jeecg-cloud-module/jeecg-cloud-demo/target/lib/ /home/deploy/develop/  \cp -r ./jeecg-cloud-module/jeecg-cloud-xxljob/target/lib/ /home/deploy/develop/  \cp -r ./jeecg-cloud-module/jeecg-cloud-quartz/target/lib/ /home/deploy/develop/  \cp -r ./jeecg-cloud-module/jeecg-cloud-supplier/target/lib/ /home/deploy/develop/    echo "开始停各模块对应的微服务"  ssh root@10.22.90.12 "cd /usr/local/dezcloud;./stop_all.sh"    scp -r /home/deploy/develop/lib root@10.22.90.12:/usr/local/dezcloud/  scp /home/deploy/develop/*.jar root@10.22.90.12:/usr/local/dezcloud/    ssh root@10.22.90.12 "cd /usr/local/dezcloud;./startup_all.sh"    ssh root@10.22.90.12 "cd /usr/local/dezcloud;./status_all.sh"


开始构建-启动

打开 My Views - > 选择新建的项目,或者直接启动

jenkins 实现自动化部署 需要哪些必要插件_git_16

点击 Build Now 进行构建,下面是构建历史,点击可查看对应的构建信息

jenkins 实现自动化部署 需要哪些必要插件_git_17

jenkins 实现自动化部署 需要哪些必要插件_jar_18

jenkins 实现自动化部署 需要哪些必要插件_jenkins_19

至此,SpringBoot项目部署完成

构建vue前端项目

构建Freestyle project

打开 新建Item -> Freestyle project ,输入名称,确定,进入配置面,源码管理

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_20

这里前端项目是保存在本地gitea服务器,所以写本地地址

构建环境

添加构建过程控制台输出时间和日志,并指定配置nodejs

jenkins 实现自动化部署 需要哪些必要插件_git_21

Build/构建

经过上面步骤之后,系统会构建项目到 /root/.jenkins/workspace/ 目录 我们通过shell脚本来更新文件然后重启项目

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_22

Shell 脚本

先创建一个目录,用于保存打包好的文件


 mkdir /home/deploy/dezcloud_dev/



 #!/bin/bash  echo "切换到打包目录"  cd /root/.jenkins/workspace/ant-design-jeecg-vue-develop  echo "npm源设置为淘宝源"  npm config set registry https://registry.npm.taobao.org  echo "开始安装项目中的依赖,基于 yarn 命令"  yarn install  echo "开始打包vue项目 基于 yarn 命令"  yarn run build    echo "开始复制打包好的文件目录,采用 \cp -r 命令不提示覆盖"  rm -rf /home/deploy/dezcloud_dev/*  \cp -r dist/* /home/deploy/dezcloud_dev/    echo "开始远程传送文件"  scp -r /home/deploy/dezcloud_dev/* root@10.22.90.12:/usr/local/nginx/html/dezcloud/  echo "重启web应用服务器"  ssh root@10.22.90.12 "cd /usr/local/nginx/sbin/;./nginx -s reload"


开始构建-启动

打开 My Views - > 选择新建的vue项目,或者直接启动,然后可直接通过日志查看构建详细信息


 22:44:03   Images and other types of assets omitted.  22:44:03  22:44:03 DONE Build complete. The dist directory is ready to be deployed.  22:44:03 INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html  22:44:03        22:44:03 Done in 177.95s.  22:44:03 开始复制打包好的文件目录,采用 \cp -r 命令不提示覆盖  22:44:04 开始重命名目录名称  22:44:04 开始远程传送文件  22:44:13 重启web应用服务器  22:44:13 nginx: [warn] conflicting server name "dez.com.cn" on 0.0.0.0:80, ignored  22:44:13 Finished: SUCCESS


四、自动构建-码云Hook

Gitee配置

前往 Jenkins -> Manage Jenkins -> Configure System-> Gitee 配置

  • 前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
  • 在 Connection name 中输入 Gitee 或者你想要的名字
  • Gitee host URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)
  • Credentials 中如还未配置码云 APIV5 私人令牌,点击 Add - > Jenkins

jenkins 实现自动化部署 需要哪些必要插件_git_23

生成后,复制对应的数据到 Gitee APIV5 私人令牌

jenkins 实现自动化部署 需要哪些必要插件_git_24

完成后,测试连接,直到显示成功

jenkins 实现自动化部署 需要哪些必要插件_jar_25

项目Gitee连接配置

打开项目配置信息,在General配置中,找到 Gitee 链接配置,选择刚刚添加的 gitee

jenkins 实现自动化部署 需要哪些必要插件_jenkins_26

配置构建触发器

选择 Gitee webhook 触发构建,需要在 Gitee webhook 中填写 URL: http://10.22.90.113:8090/gitee-project/jeecgboot-develop ,需要注意就是下面我配置的是只构建 develop 分支,具体可根据情况配置

jenkins 实现自动化部署 需要哪些必要插件_jenkins_27

生成Hook密码

jenkins 实现自动化部署 需要哪些必要插件_git_28

设置完成后,保存。

设置gitee项目-webHooks

打开gitee项目,管理 ->WebHooks- >添加 WebHook` ,需要注意的是,下面的URL我配置成对应的外网URL

jenkins 实现自动化部署 需要哪些必要插件_git_29

添加完成后,点击测试

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_30

然后需要去jenkins查看构建信息,打开jenkins,进去项目

jenkins 实现自动化部署 需要哪些必要插件_jenkins_31

如果没有收到构建信息,是因为我们配置了指定版本,方便测试,设置选项为 允许触发构建的分支

jenkins 实现自动化部署 需要哪些必要插件_jenkins_32

到此,自动构建完成

五、自动构建-Gitea Hook

此操作步骤与码云hook类似

Gitea Servers 配置

前往 Jenkins -> Manage Jenkins -> Configure System-> Gitea Servers

  • 前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
  • 在 Name 中输入 Gitea 或者你想要的名字
  • Server URL 中输入码云完整 URL地址: http://10.22.90.113:3040(私有化客户输入部署的域名)
  • 选择 Manage hooks中的 Credentials 中 选择添加
  • 配置成功后,下面会显示 gitea 私服的版本号及对应账号名称

新建 gitea Access Tokens

jenkins 实现自动化部署 需要哪些必要插件_git_33

jenkins 实现自动化部署 需要哪些必要插件_jenkins_34

jenkins 实现自动化部署 需要哪些必要插件_git_35

关闭 CSRF 验证

如果是exe安装的话,找到jenkins.xml 文件,找到 <arguments> 标签,在里面加上 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true,如果是war包运行在java后面加上这句:


 java -jar -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true jenkins.war --httpPort=8090


它的作用是关闭 CSRF 验证,不关的话,Gitea 的 webhook 会一直报 403 错误,无法使用。加好参数后,重启Jenkins

修改授权策略

打开 jenkins -> Configure Global Security -> 授权策略

jenkins 实现自动化部署 需要哪些必要插件_jar_36

项目配置 构建触发器

选择 触发远程构建 (例如,使用脚本) 输入身份验证令牌,此外可随意写

jenkins 实现自动化部署 需要哪些必要插件_jar_37

配置gitea web钩子

打开你的 Gitea 仓库页面,选择仓库设置管理web钩子添加web钩子,钩子选择Gitea

连接地址为:http://10.22.90.113:8090/job/ant-design-jeecg-vue-develop/build?token=dez

其中前端 IP 为我Jenkins服务地址,后面dez 为令牌值

jenkins 实现自动化部署 需要哪些必要插件_Jenkins_38

配置完毕,测试推送

jenkins 实现自动化部署 需要哪些必要插件_jar_39

在jenkins项目中查看构建信息,显示在构建,说明关联成功

jenkins 实现自动化部署 需要哪些必要插件_jar_40

至此,linux环境下的Jenkins安装与配置,构建SpringCloud项目及vue前端项目,以及基于gitee、gitea源码服务器的自动构建介绍完毕,完结,散花~


常见问题

1、git配置返回 returned status code 128:stdout:stderr: fatal: Unable to find remote helper for 'https'

需要添加git环境变量到配置文件,:/usr/libexec/git-core

vim /etc/profile    
 
 export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$NODE_HOME/bin:$PATH:/usr/libexec/git-core
 
 source /etc/profile

2、修改jenkins目录所有者


chown  root:root -R   /usr/local/jenkins
 chown  root:root  -R  /root/.jenkins


3、解决打包时不能下载 sass问题

yarn add node-sass  --dev
 yarn add sass-loader --dev
 npm run build

4、没有npmrc文件

需要安装Pipeline NPM Plugin,在系统管理里找到 Manage Plugins,再安装 npm 插件即可。