利用Jenkins自动构建并部署项目

一、安装Jenkins

1.下载依赖

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 

2.导入秘钥

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key 

3.安装

yum install jenkins #等待安装时间较长,中途需要输入一次Y,确定安装

在这里插入图片描述
jenkins安装完毕

4.启动前检查是否已安装jdk

java #显示java参数即证明已安装jdk 

5.查找jenkins安装路径

rpm -ql jenkins 

在这里插入图片描述
jenkins安装路径
jenkins相关目录释义:
(1)/usr/lib/jenkins/:jenkins安装目录,war包会放在这里。
( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
(3)/var/lib/jenkins/:默认的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:jenkins日志文件。

6.配置jenkins

(1)查找jenkins端口

vim /etc/sysconfig/jenkins

在这里插入图片描述

查找到jenkins端口为8080

(2)查看其他端口占用情况

netstat -ntlp 

在这里插入图片描述

显示已被占用端口
被占用端口与jenkins端口8080无冲突,即可进入下一步启动jenkins

(3)启动jenkins

 java -jar /usr/lib/jenkins/jenkins.war --httpPort=8888

(4)修改jenkins端口

若默认8080端口未被占用,可不修改
若端口已被占用,则修改端口为其他端口,并将对应端口开放

#端口改为8888 
java -jar /usr/lib/jenkins/jenkins.war --ajp13Port=-1 --httpPort=8888
#启动 
java -jar /usr/lib/jenkins/jenkins.war --httpPort=8888
#后台启动
nohup java -jar /usr/lib/jenkins/jenkins.war --ajp13Port=-1 --httpPort=8888 >/dev/null 2>&1

在这里插入图片描述
启动完成

(5)验证jenkins能否打开

在宿主机浏览器输入http://IP:Port
在这里插入图片描述
进入jenkins解密界面(首次进入,需要等待初始化一段时间)

(6)解锁jenkins

获取密码

cat /var/lib/jenkins/secrets/initialAdminPassword

在这里插入图片描述

输入密码=>继续

(7)安装插件

在这里插入图片描述
选择第一个,安装推荐的插件,后续需要的插件再自行安装
在这里插入图片描述
等待安装插件完毕,打×的插件是由于网络传输导致的安装失败,后面再重新安装即可。注意:这个步骤中如果选择了安装插件则系统必须能够联网

(8)创建用户

在这里插入图片描述
可以选择使用admin账户继续,后面有需要仍然有机会注册新账户。

(9)安装完毕

在这里插入图片描述
开始使用Jenkins

(10)配置Maven

1.安装maven
mkdirs /soft/maven #创建存放maven文件的目录
cd /soft/maven #切换到maven目录
1.1.下载安装文件
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
1.2.解压安装:
tar -zxvf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 maven #这一步骤可省略,主要是为了后面方便操作
1.3配置环境变量
vim /etc/profile

在/etc/profile文件末尾增加以下配置:

M2_HOME=/soft/maven/maven
PATH=$PATH:${M2_HOME}/bin

在这里插入图片描述

source /etc/profile #重载/etc/profile配置文件
1.4检验maven是否安装成功
mvn -v

在这里插入图片描述

2.修改maven配置文件
2.1将maven配置文件/soft/maven/maven/conf/settings.xml导出到本地
2.2修改maven配置
<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">


  <pluginGroups>
  </pluginGroups>

  <proxies>
  </proxies>


  <servers>
	<server>
      <id>releases</id>
      <username>admin</username>
      <password>admin-1234</password>
    </server>
    
    <server>
      <id>snapshots</id>
      <username>admin</username>
       <password>admin-1234</password>
    </server>
  </servers>

  <mirrors>
	<mirror>
      <id>public</id>
      <mirrorOf>*</mirrorOf>
      <name>Public Repositories.</name>
	  <url>http://13.12.2.25:8088/repository/maven-public/</url>
    </mirror>
	
	<!-- 阿里云仓库 -->
	<mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

  <profiles>
	<profile>
		<id>nexus</id>
		<repositories>
			<repository>
				<id>nexus</id>
				<name>local private nexus</name>
				<url>http://13.12.2.25:8088/repository/maven-public/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
		</repositories>
		<pluginRepositories>
			<pluginRepository>
				<id>nexus</id>
				<name>local private nexus</name>
				<url>http://13.12.2.25:8088/repository/maven-public/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</pluginRepository>
		</pluginRepositories>
	</profile>

	<profile>
		<id>release</id>
		<properties>
			<svn.username>guangjianyang</svn.username>
			<svn.password>jeking</svn.password>
	    </properties>
	</profile>
	
	<profile>
      <id>jdk-1.8</id>
      <activation>
		<activeByDefault>trye</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.comilerVersion>1.8</maven.compiler.comilerVersion>
	  </properties>
    </profile>
  </profiles>
  <activeProfiles>  
    <activeProfile>nexus</activeProfile>  
  </activeProfiles>
</settings>

2.3导入覆盖服务器/soft/maven/maven/conf/settings.xml
3.jenkins配置maven
3.1.点击系统管理

在这里插入图片描述

3.2.配置maven和jdk

在这里插入图片描述
在这里插入图片描述
保存save

二、安装插件

在这里插入图片描述

1.安装Deploy to container Plugin插件

在这里插入图片描述

1.1右上角Filter输入deploy to container

在这里插入图片描述

1.2选中该插件,点击Install without restart/直接安装

在这里插入图片描述
安装插件时受到网络状况的影响有可能会失败,不要紧,多试几次,直到成功。

2.安装Publish Over SSH插件

Publish Over SSH插件用于构建项目完毕后,自动部署到指定机器使用
在这里插入图片描述
一样选中插件,然后点击Install without restart/直接安装

2.1xshell生成秘钥

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存为文件后,点击完成
在这里插入图片描述
Xshell生成的秘钥如下
在这里插入图片描述

2.2公钥上传到服务器

(1)把公钥上传到服务器任意目录
(2)剪切公钥到/root/.ssh/目录
mv /home/zhuxiange/id_rsa_2048.pub /root/.ssh

在这里插入图片描述

2.3配置jenkins上SSH

在这里插入图片描述
在这里插入图片描述

三、配置项目

在这里插入图片描述

1.创建hse工程

(1)构建项目

在这里插入图片描述
选择构建一个自由风格的软件项目

(2)配置源码来源

在这里插入图片描述
在这里插入图片描述

(3)配置触发构建条件

在这里插入图片描述

(4)配置构建命令

在这里插入图片描述

Save保存

2.创建hse-protal-web工程

(1)构建项目

在这里插入图片描述
选择构建一个自由风格的软件项目

(2)配置源码来源

在这里插入图片描述

(3)配置触发构建条件

在这里插入图片描述
此处和hse工程的的Post-build Actions,二选一

(4)配置构建命令

在这里插入图片描述

(5)配置构建完成后发送到服务器自动运行

在这里插入图片描述

start-hse-web-service8080.sh的源码为:

#!/bin/bash
 
APP_NAME=/soft/hse-protal-web-0.0.1-SNAPSHOT.jar
APP_PORT=8080
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh start-hse-web-service.sh [start|stop|restart|status|start8080|stop8080|restart8080|status8080]"
    exit 1
}
 
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}
#检查程序是否在运行
is_exist8080(){
  pid=`lsof -i:$APP_PORT|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}
#启动方法
start(){
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    nohup java -jar ${APP_NAME} --spring.profiles.active=prod >/dev/null 2>&1 &
  fi
}
 
#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi  
}
 
#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}
 
#重启
restart(){
  stop
  sleep 5
  start
}

#启动方法8080
start8080(){
  is_exist8080
  if [ $? -eq 0 ]; then
    echo "${APP_PORT} is already running. pid=${pid}"
  else
    #此处为重点,默认情况下jenkins构建完毕会kill掉他创建出来的进程
    source /etc/profile
    BUILD_ID=dontKillMe
    nohup java -jar ${APP_NAME} --spring.profiles.active=prod >/dev/null 2>&1 &
    sleep 10
  fi
}
 
#停止方法8080
stop8080(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_PORT} is not running"
  fi  
}
 
#输出运行状态8080
status8080(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_PORT} is running. Pid is ${pid}"
  else
    echo "${APP_PORT} is NOT running."
  fi
}
 
#重启8080
restart8080(){
  stop8080
  sleep 1
  start8080
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  "start8080")
    start8080
    ;;
  "stop8080")
    stop8080
    ;;
  "status8080")
    status8080
    ;;
  "restart8080")
    restart8080
    ;;
  *)
    usage
    ;;
esac

四、构建工程
1.手动构建

在这里插入图片描述
在这里插入图片描述
2.自动构建
jenkins会自动检测svn代码是否有提交,如果有提交,则自动更新代码,然后先构建hse工程,然后处罚hse-protal-web工程,最后发送jar包到服务器,跑sh脚本自动部署

最后总结:

1.Jenkins很好用,SVN代码提交,Jenkins自动检测出来,然后自动构建部署
2.Publish Over SSH插件是自动部署的关键,Jenkins自动构建出来后,通过SSH推送jar包到远程服务器,然后自动执行配置的shell命令
3.值得注意的一个地方,就是就是启动jar的时候,要添加如下命令,不然无法启动,因为Jenkins会在build完毕后,kill掉所有他构建出来的所有衍生进程
在这里插入图片描述
4.还有个地方也是SSH,需要配置SSH时,填入公钥的地址和私钥的全部内容,使用authorized_keys时无法连接上去
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值