jenkins

1.什么是jenkins

jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,指在提供一个开放易用的软件平台,时软件项目可以进行持续集成

2.为什么使用jenkins

开发人员---代码提交到git远程仓库后,需要拉取--编译--打包--部署。每次提交到git仓库都需要重复做这样的事情。拉取--编译--打包--部署非常耗时--如果是人工来完成非常麻烦,jenkins就可以完成这些重复的工作

3.如何使用jenkins

3.1安装jenkins

使用java语言编写的一款工具。需要jdk环境,jenkins最新版要求jdk必须为11以上并且不能是20

1.安装jdk17到指定目录

解压之后配置环境变量:vi /etc/profile

export JAVA_HOME=/usr/local/soft/jdk17
export PATH=$PATH:$JAVA_HOME/bin

刷新 /etc/profile

2.将jenkins.war上传到虚拟机指定目录

执行:yum install fontconfig

运行jenkins.war文件 :nohup java -jar /usr/local/soft/jenkins.war  --httpPort=8777  > /usr/local/soft/jenkins.log 2>&1 &

其中:

nohup--当服务休眠时jenkins服务依然运行

java -jar : 运行jenkins.war文件

--httpPort: http的端口号

/usr/local/soft/jenkins.log 2>&1: 启动jenkins生成日志放入该文件中

&:表示后台运行

访问浏览器:虚拟机端口号:8777

密码在

登录之后可以通过设置修改密码:

3.2jenkins集成jdk环境

由于jenkins需要从git拉取代码--需要进行编译。所以在jenkins所在的服务器安装jdk并配置jdk的环境。

3.3jenkins集成git

由于jenkins需要从git远程仓库拉取项目代码,所以需要集成git。

# 安装
yum install git -y
# 查看版本
git --version

新建git仓库测试:

在jenkins中创建任务:

3.4jenkins集成maven

因为我们现在的项目都是maven项目,---打包--需要对拉取的项目进行打包。

(1)在jenkins所在的服务器安装maven.

把下载的maven放入linux系统中

(2)解压

tar -zxvf XXX.tar.gz

(3)配置环境变量

vi /etc/profile

##########################MAVEN环境的配置##########################
export MAVEN_HOME=/usr/local/soft/maven3.9.4
export PATH=$PATH:$MAVEN_HOME/bin

(4)配置maven的本地仓库和阿里镜像

<localRepository>/path/to/local/repo</localRepository>

<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>

在jenkins上集成maven

生成一个jar包

如果运行时出现:qy168-jenkins02-0.0.1-SNAPSHOT.jar中没有主清单属性

就在项目pom文件中添加:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3.5jenkins自动从gitee拉取代码

当gitee仓库中代码发生改变时,需要我们手动从git拉取代码。并手动完成编译和打包。

默认gitee不允许内网自动拉去代码。-------需要配置内网穿透。

内网穿透软件有很多:而我们使用natapp。NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

复制这个token

打开natapp客户端:输入natapp.exe -authtoken= 这里为复制的token

输入后回车

回到jenkins安装gitee插件

回到gitee设置WebHook以及密码

添加WebHook

测试:在idea中提交到gitee发现jenkins会自动提交打包到配置jenkins上的服务器

3.6jenkins完成自动化部署

我们的项目部署尽量不要和jenkins在同一台服务器上

在真正开发中,项目提交代码时需要测试的,需要部署到测试的服务器上进行测试。jenkins非常耗费资源。因为jenkins所在的服务器中需要安装集成很多软件。如果我们的项目也部署到当前jenkins所在的服务的话,那么肯定会影响项目的性能

而jenkins从gitee自动拉取的代码---进行编译---打包---默认放在jenkins所在的目录。如何将打包好的项目放入到其他服务器下:

远程copy------把一台机器上的软件远程复制到其他服务器下。

scp /本地的文件   远程的账号@远程的ip:/远程的目录
scp /xxx.jar     root@192.168.61.225:/usr/local/XXXX.jar

测试192.168.61.223[jenkins所在]往192.168.61.225上发送maven

远程复制时需要输入密码: ----未来我们使用jenkins帮你完成远程复制---那么我们必须配置免密复制。

如何来设置免密操作。

免密登录主要是方便jenkins服务器192.168.61.223的root用户—》应用服务器192.168.61.225的root用户上的jar包拷贝,部署本就是jar包拷贝的过程

在192.168.61.223【jenkins】机器上使用root用户生成秘钥注意此处是root用户

ssh-keygen -t rsa
# 3次回车

运行后会在当前root目录生成一个.ssh文件夹

ssh文件夹中的文件描述

-id_rsa生成的私钥文件

-id_rsa.pub生成的公钥文件

接下来需要将公钥导入到认证文件中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

如果希望ssh公钥生效需满足至少下面两个条件:

.ssh目录的权限必须是700

.ssh/authorized_keys文件权限必须是600

给对应文件授权

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

authorized_keys文件拷贝到另一台应用服务器的root用户.ssh目录下

# 在应用服务器(192.168.61.225)上用root用户创建/root/.ssh文件夹  mkdir -p /root/.ssh

# 在jenkins服务器(192.168.61.223)上将pub公钥文件拷贝到应用服务器的.ssh目录下

scp -p ~/.ssh/id_rsa.pub root@192.168.61.225:/root/.ssh/authorized_keys

输入192.168.61.225的root密码

再进行测试:192.168.61.223[jenkins所在]往192.168.61.225上发送maven

发现无需输入密码:

上面已经配置好免密操作,让jenkins通过一个脚本完成复制功能。

将shell脚本放入

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
server_ips="192.168.61.225"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar

EOF

done

echo "success"

在部署项目的服务器上放置部署的项目中创建一个脚本:

 mkdir -p /data/app/my-boot

1.启动jar的脚本

#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail

APP_ID=my-boot
APP_DIR="/data/app"

nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

2.关闭jar的脚本

#!/bin/bash

APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

注意修改权限:

修改jenkins 的Post Steps

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
server_ips="192.168.61.225"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
${DIR}/${projectName}/stop.sh
${DIR}/${projectName}/start.sh

EOF

done

echo "success"

完成

测试提交到git,已经在192.168.61.225服务器运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值