Jenkins安装于mac,服务器是Centos 7.9
1:环境准备
1.1 docker上安装Jenkins
先进入官网,然后选择docker(建议一般选择LTS【长期支持版】)
将jenkins安装并运行到docker上
#下载jenkins到docker上
docker pull jenkins/jenkins
#创建本地数据卷 实际是在/Users/mac2016/java/jenkins_home/ 此处mac2016是我使用mac的名称
mkdir -p /java/jenkins_home/
# 创建容器
docker run -d --name jenkins -p 8040:8080 -p 50000:50000 -v /Users/mac2016/java/jenkins_home:/var/jenkins_home jenkins/jenkins
-d 标识是让 docker 容器在后台运行
--name 定义一个容器的名字,如果没有指定,那么会自动生成一个随机数字符串当做UUID
-p 8040:8080 端口映射,我本地的`8080`被占用了,所以随便映射了一个`8040`
-p 50000:50000 端口映射
-v /data/jenkins_home:/var/jenkins_home 绑定一个数据卷,`/data/jenkins_home`是刚才创建的本地数据卷
1.2 配置Jenkins
1.2.1 基础配置
启动docker以后,等一会,然后通过浏览器访问 http://localhost:8040/`(注意替换成你自己的IP和端口)进入初始页,如果 Jenkins 还没有启动完成,会显示如下内容
如果出现下列页面,则输入管理员密码,根据提示密码。
在/var/jenkins_home/secrets/initialAdminPassword
这个文件中,注意这个路径是 Docker 容器中的,所以我们通过如下命令获取一下
# 0382307ce1d4 容器id
docker exec 0382307ce1d4 cat /var/jenkins_home/secrets/initialAdminPassword
登录Jienkins页面之后页面如下:【安装推荐插件】
安装完毕之后需要创建一个新的账号,页面如图 :
然后在 系统管理 =》插件管理=》可用插件。安装下面几个插件:
1:Rebuilder 重新构建。
2: Safe Restart 安全重启Jenkins
3:Maven Integration plugin
4:Publish over SSH
1.2.2 配置全局安全属性
默认用户登录之后可以做任何事情【不是很安全】。所以需要去【Manage Jenkins=》Configure System】配置
1.2.3 添加用户
【Manage Jenkins=》Manage Users】
然后在 【Configure Global Security】中给此用户添加权限
然后可以对比看下两个用户的差别
2 centos 7配置
此linux需要 ssh远程连接、ip、防火墙关闭。
2.1 java环境搭建
下载jdk到 /usr/java,然后解压。解压后安装下列进行操作
打开文件
vim /etc/profile
在末尾添加
export JAVA_HOME=/usr/java/jdk1.8.0_251
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效
source /etc/profile
检查jdk是否安装完毕
java -version
2.2 git 安装
1:安装git
#安装git
yum install -y git #安装git
git version #查看版本
#git初始化并且生成授权证书
git config --global user.name "qy"
git config --global user.email "1439107348@qq.com"
ssh-keygen -t rsa -C "1439107348@qq.com" #生成证书 输入后一路回车
2: 将git证书配置到github上,保证linux服务器以及github之间可联通
获取公匙,然后复制到github上面
vim id_rsa.pub
然后在linux上 测试是否正确连接上
ssh git@github.com
2.3 Maven安装
这⾥下载的是 【apache-maven-3.6.3-bin.tar.gz】 安装包,并将其放在了 ==/usr/local/temp== ⽬录下
# 解压压缩包
cd /usr/local
# 将压缩文件解压至当前目录【/usr/local】
tar -zxvf /usr/local/temp/apache-maven-3.6.3-bin.tar.gz -C ./
# 解压后会得到一个【apache-maven-3.6.3】目录,将其重命名为【maven】目录
mv apache-maven-3.6.3/ maven
这⾥配置的是阿⾥云的maven镜像源。编辑修改【/usr/local/maven/conf/settings.xml】文件,在 <mirrors></mirrors> 标签对⾥添加如下内容即可:
vim /usr/local/maven/conf/settings.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置环境变量,编辑修改 vim /etc/profile ⽂件,在⽂件尾部添加如下内容,配置 maven 的安装路径。配置完毕之后执⾏ source /etc/profile 来刷新环境变量,让 maven 环境的路径配置⽣效
# MAVEN
export MAVEN_HOME=/usr/java/maven #maven路径
export PATH=$MAVEN_HOME/bin:$PATH
最后执行 mvn –v ,能打印出 maven 版本信息说明安装、配置成功:
2.4:配置Tomcat
先下载Tomcat,可以直接Linux上下载,或者本机下载之后移动到Linux上
直接Linux下载:
wget http://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-10/v10.0.12/bin/apache-tomcat-10.0.12.zip
去官网下载
下载完毕之后解压文件 :unzip apache-tomcat-10.0.12.zip
配置tomcat 【配置可执行权限与端口】,进入tomcat目录下
chmod a+x -R *
修改端口:
vim conf/server.xml
然后在tomcat文件下启动tomcat:
bin/startup.sh
检查tomcat是否启动:
ps -ef|grep tomcat
2.5 将Linux注册到Jenkins上
2.5.1 Jenkins 新建节点
高级设置:
添加完成之后如下图:
然后单击MyTest(就是刚刚新增的节点) 进入下一个页面之后继续单击【重启代理】然后等待
2.5.2 创建一个新任务【验证Jenkins是否配置成功】
2.5.3 用一个SpringBoot测试【war格式发布 不推荐】
创建一个简单的SpringBoot Demo,然后上传到gitee/github 。然后在Jenkins中创建一个任务
SpringBoot Demo结构如下
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>demoWeb</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 指定war报-->
<packaging>war</packaging>
<!-- <properties>-->
<!-- <maven.compiler.source>8</maven.compiler.source>-->
<!-- <maven.compiler.target>8</maven.compiler.target>-->
<!-- </properties>-->
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<artifactId>spring-boot-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.13.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!--thymeleaf 前端框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- 部署必须要这个 将tomcat 内嵌到 web项目中,这样可以直接运行 webapp项目。不需要再部署到额外的tomcat,直接就可以运行了。-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
UserController.cs
package com.item.Controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @Description:用户控制器
* @Author
* @Date
*/
@Controller
@Slf4j
@RequestMapping("user")
public class UserController {
@GetMapping
public String user(Model model) {
log.info("进入到项目");
model.addAttribute("title", "欢迎来到用户界面");
return "user";
}
}
Application.cs
package com.item;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
/**
* 如果部署tomcat上,必须有这一句,打包方式war
* @param application
* @return
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2 th:text="${title}"></h2>
测试小酱油
</body>
</html>
deploy.sh
#!/usr/bin/env bash
#编译+部署demoWeb站点
#需要配置如下参数
# 项目路径, 在Execute Shell中配置项目路径, pwd 就可以获得该项目路径
# export PROJ_PATH=这个jenkins任务在部署机器上的路径
# 输入你的环境上tomcat的全路径
# export TOMCAT_APP_PATH=tomcat在部署机器上的路径
### base 函数
killTomcat()
{
pid=`ps -ef|grep tomcat|grep java|awk '{print $2}'`
echo "tomcat Id list :$pid"
if [ "$pid" = "" ]
then
echo "no tomcat pid alive"
else
kill -9 $pid
fi
}
#当前执行语句需要进入demoWeb工程根目录
cd $PROJ_PATH/demoWeb
# 利用maven构建工程
mvn clean install
# 停tomcat
killTomcat
# 删除原有工程
rm -rf $TOMCAT_APP_PATH/webapps/ROOT
rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
rm -f $TOMCAT_APP_PATH/webapps/demoWeb-1.0-SNAPSHOT.war
# 复制新的工程
cp $PROJ_PATH/demoWeb/target/demoWeb-1.0-SNAPSHOT.war $TOMCAT_APP_PATH/webapps/
cd $TOMCAT_APP_PATH/webapps/
mv demoWeb-1.0-SNAPSHOT.war ROOT.war
# 启动Tomcat
cd $TOMCAT_APP_PATH/
sh bin/startup.sh
项目创建完成之后,生成好war包,然后上传到git中。最后在jenkins启动就行【https://gitee.com/wcjr/jenkins-ts_-springboot.git】
注意。war格式不会使用到application.yml中的配置。所以发布好之后,直接ip+端口+控制器内访问地址就行
http://111.230.182.125:8080/user
2.5.4 jar格式发布【此方式不需要idea打包上传,jenkins会有设置打包的地方。推荐使用此方式发布】
首先去配置全局变量
创建任务【构建一个maven项目】:
jar格式部署。必须在pom.xml中配置下列代码。否则发布失败=》No main manifest attribute, in XXX.jar
<build>
<plugins>
<!-- jar发布必须加上这个-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
start.sh 【此处shell 命令不再用之前war格式发布的 deploy.sh,在deploy.sh同级目录下上创建一个 start.sh命令】
#!/bin/sh
#Copy jar to target path
BUILD_ID=DONTKILLME #后台执行
pid=$(ps -ef|grep demoWeb-1.0-SNAPSHOT.jar|grep -v grep | awk '{print $2}')
#判断demo文件夹是否存在,如果存在,就echo 命令打印,否则创建
[ -d /home/jar/demo ] && echo "已经存在" || echo "不存在,即将创建" mkdir -p /home/jar/demo
#copy jar 到启动目录 $PROJ_PATH/demoWeb/target/为jenkins的工作目录,springboot-test为jenkins新建的item的name
cp -r $PROJ_PATH/demoWeb/target/demoWeb-1.0-SNAPSHOT.jar /home/jar/demo
# 关闭已经启动的jar进程
function stop(){
if [ -n "$pid" ]
then
echo "pid进程 :$pid"
kill -9 $pid
else
echo "进程没有启动"
fi
}
stop
sleep 5s
#发布jar服务
function start(){
cd /home/jar/demo
nohup java -jar demoWeb-1.0-SNAPSHOT.jar --server.port=8089 >demo.log 2>&1 &
}
start