1. jenkins集成JDK
-
成功登录Jenkins后,选择
Manage Jenkins
,选择Tools
-
集成JDK
2. jenkins集成git
因为Jenkins自动从git远程仓库拉取代码
首先要在Jenkins所在的linux服务器上安装git
yum install -y git
然后,实行集成JDK的第一步
-
配置git
3. Jenkins创建项目,拉取git仓库中的代码
-
选择
新建Item
,创建一个Jenkins项目 -
添加git远程仓库地址
现在jenkins无法自动拉取代码【当仓库中的代码发生改变时无法自动拉取】
-
手动拉取——点击
Build Now
,立马构建,若构建成功,表示之前的集成和配置成功
4. Jenkins集成maven
由于Jenkins本身不能对代码进行打包。所以我们需要集成maven,而且我们的项目100%都是maven构建的项目
- linux安装maven
-
将下载好的maven文件拉取到Jenkins所在的Linux服务器上
-
解压
tar -zxvf xxx.tar.gz
-
配置环境变量
vi /etc/profile
export MAVEN_HOME=安装路径 export PATH=$MAVEN_HOME/bin:$PATH
退出并保存
-
重启
source /etc/profile
-
查看版本
mvn -version
显示版本号,即为安装成功
-
修改maven配置文件【本地仓库和阿里云远程仓库地址】
可将window里的配置文件覆盖到linux中
- Jenkins集成maven
-
安装maven项目
-
jenkins集成maven
5.实现自动拉取
因为gitee仓库的代码——默认gitee不允许内网拉取
所以需要借助内网穿透软件以实现内网拉取
1. 准备内网穿透的软件——NATAPP
可直接参考官方文档:
https://natapp.cn/article/natapp_newbie
-
打开网址,进行免费注册
https://natapp.cn/article/natapp_newbie
-
注册成功后,会借助支付宝完成个人信息认证
-
成功后的页面
-
-
功后,点击
购买隧道
,选择免费购买
,点击选择免费购买
即可 -
点击
客户端下载
,根据具体需要下载对应的版本 -
将其解压在一个文件夹后,创建一个后缀为
.bat
的脚本,用于开启natapp。脚本内容为:start natapp -authtoken=xxxx
,xxxx内容为自己的authtoken- 查看自己的authtoken:点击
我的隧道
即可看见
-
点击在上示图片中的
配置
,配置自己的jenkins的服务器ip和端口号8777,以实现jenkins的自动拉取 -
最后,双击步骤5中自己创建的
.bat
文件,生成外网域名
- 查看自己的authtoken:点击
以上完成了关于NATAPP的相关操作
2. 关于jenkins上的操作
-
创建一个
新建item
,选择maven -
点开该项目配置git
-
配置构建触发器,做以下操作,点击保存即可【在此之前需要先下载安装gitee插件】
3. 修改gitee仓库的配置
-
选中jenkins配置的那个远程仓库,点击
配置
,选中WebHooks
,点击添加 -
配置URL和WebHook密码
测试
完成上述操作后,即可实现远程仓库改变,jenkins自动拉取
6.实现自动化部署
通过shell脚本实现自动化部署
jenkins 软件需要大量集成第三方很多软件【maven、git、jdk】,如果我们的项目也部署到该服务器下,势必导致项目性能弱
把jenkins所在的服务器下打包好的项目远程复制到其他服务器上。在其他服务器进行项目的启动和关闭
- 远程复制命令
scp xxx.jar root@远程ip:/远程路径
此时需要输入密码,所以要进行免密复制操作
6.1 免密复制操作
配置ssh免密登录
免密登录主要是方便Jenkins服务器的root用户——向——>应用服务器的root用户上 jar包拷贝。部署本就是jar包拷贝的过程
- 在Jenkins机器上使用root用户 生成密钥【注意,此处是root用户】
ssh-keygen -t rsa
然后进行3次回车
运行后会在当前用户的根目录生成一个 .ssh
文件夹
ssh文件夹中的文件描述
id_rsa
:生成的私钥文件id_rsa.pub
:生成的公钥文件
- 接下来,需要将公钥导入到认证文件中【Jenkins】
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
如果希望ssh公钥生效需要满足至少下面两个条件:
.ssh
目录的权限必须是700.ssh/authorized_keys
文件权限必须是600
- 给对应文件授权【Jenkins】
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
-
将
authorized_keys
文件拷贝到另一台应用服务器的root用户 .ssh目录下-
首先在应用服务器上用root用户创建/root/.ssh文件夹
mkdir -p /root/.ssh
-
在Jenkins服务器上将pub公钥文件拷贝到应用服务器的 .ssh目录下
-
scp -p ~/.ssh/id_rsa.pub root@应用服务器的IP地址:/root/.ssh/authorized_keys
- 在Jenkins服务器上进行免密连接测试
ssh 应用服务器ip地址
总结
1. 在jenkin所在的服务器使用ssh-keygen -t rsa
2. 把公钥加载到认证文件中cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. 修改.ssh [700]和authorized_keys [600]的权限.
4. 把jenkins服务器上公钥远程复制到免密的服务器上。mkdir -p /root/.ssh
scp -p ~/.ssh/id_rsa.pub root@应用服务器的IP地址:/root/.ssh/authorized_keys
6.2 用于远程复制的脚本
- 点开Jenkins项目,点击
配置
- 选中下图位置,点击
Execute shell
,将脚本粘贴到此处
脚本
#!/bin/bash
echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"
echo "待部署的应用服务器,可多台"
# 部署项目的ip
server_ips="172.16.7.112"
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"
把Jenkins打包的jar远程copy到指定的服务器下
6.3 用于启动项目的脚本
-
根据远程复制的脚本,可知项目打包后的路径
/data/app
-
该目录下有my-boot目录
-
在该目录下创建
start.sh
文件mkdir start.sh
-
将下列脚本复制粘贴即可
#!/bin/bash
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
6.4 用于关闭的脚本
-
根据远程复制的脚本,可知项目打包后的路径
/data/app
-
该目录下有my-boot目录
-
在该目录下创建
stop.sh
文件mkdir stop.sh
-
将下列脚本复制粘贴即可
#!/bin/bash
APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
6.5 在Jenkins配置中引入关闭和启动脚本
sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh
先关后开
6.6 测试
测试时,需要在应用服务器上启动该项目,同样在my-boot目录下
java -jar my-boot.bar