1 什么是jenkins
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
2 为什么要使用jenkins
5.3 安装jenkins
安装到linux服务器上。-----必须按照jdk---而且jdk的本版必须对应jenkins软件的本版
jdk的本版必须为11以上而且不能是20版本
1.必须安装jdk[省略
2.安装jenkins的依赖的插件
yum install fontconfig
3.运行jenkins服务
1. 下载jenkins 网址:https://mirrors.jenkins.io/war/ 2. 启动jenkins # 使用nohup命令启动 nohup 当虚拟机黑屏时 也会运行 日志--->输出到jenkins.log & 后台运行
nohup java -jar /usr/app/jenkins.war --httpPort=8777 > /usr/app/jenkins.log 2>&1 &4.
浏览器访问jenkins服务器 ip是自己服务器的网址 http://ip:8777 5.推荐安装
3. jenkins集成jdk
因为我们写的项目都是java项目,因为jenkins自身无法完成编译功能,所有需要集成jdk。
需要再jenkins所在的服务器安装jdk.
4. jenkins集成git
jenkins回自动拉取git改变的代码。需要jenkins需要集成git这个软件
jenkins所在的服务器安装git
yum -y install git git --version
jenkins集成git软件
gitee创建一个仓库
jenkins创建任务
一个任务对应一个项目。
5. jenkins集成maven
现在的项目全部都是maven结构的项目。
再jenkins所在的服务器安装maven软件
1. 解压maven压缩包 2. 重命名 3. 配置环境变量 vi /etc/profile ################################MAVEN环境变量################################## export MAVEN_HOME=/usr/app/maven3.9.6 export PATH=$MAVEN_HOME/bin:$PATH 4. 刷新配置 source /etc/profile 5. 配置maven的本地仓库和远程镜像 <!-- 中央仓库在中国的镜像 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
jenkins集成maven
1. jenkins安装maven插件 2. 集成本地的maven
测试拉取远程maven项目
构建一个新的任务(maven项目)
6. jenkins自动拉取git仓库的代码
默认gitee不允许内网访问gitee中的代码
所以要借用第三方软件
6.1 使用内网穿透软件
内网的项目可以通过内网穿透软件让外网访问。natapp
(1)在该网址https://natapp.cn/注册一个账号 并购买免费的隧道
购买免费隧道
下载客户端
看自己的电脑支持 下载对应的版本
输入要被代理的地址 和端口号
6.2 jenkins安装gitee
修改gitee的内容
7. jenkins完成自动部署功能
思考: 项目部署的服务器和jenkins所在的服务器要不要是同一台。==不要再同一台服务器==
原因: jenkins所在的服务器需要安装很多软件。jenkins所在的服务器消耗资源非常大。如果项目和jenkins再同一台服务器,势必会造成项目卡。
思考: 我们刚才观察到jenkins项目好的项目jar就在jenkins所在的服务器。
把打不好的项目复制到其他服务器。
解决: 远程复制。 scp 要复制的文件 root@远程ip:/远程目录
发现: 需要你输入远程服务器的密码。而jenkins软件不能帮你输入密码。
解决: 免密操作
如何设置密码操作
免密登录主要是方便jenkins服务器192.168.223.188的root用户—》应用服务器192.168.223.187的root用户上的jar包拷贝,部署本就是jar包拷贝的过程
在192.168.223.188【jenkins】机器上使用root用户生成秘钥注意此处是root用户
$ ssh-keygen -t rsa
# 3次回车
运行后会在当前用户的根目录生成一个.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.223.187)上用root用户创建/root/.ssh文件夹 mkdir -p /root/.ssh、# 在jenkins服务器(192.168.223.188)上将pub公钥文件拷贝到应用服务器的.ssh目录下
scp -p ~/.ssh/id_rsa.pub root@192.168.223.187:/root/.ssh/authorized_keys
在jenkins192.168.223.188服务器上进行免密连接测试.
发现无需输入密码
7.2 让jenkins复制打包好的项目到其他服务器
#!/bin/bash echo "部署的目录和项目名称" DIR="/data/app" projectName="my-boot" echo "待部署的应用服务器,可多台" server_ips="192.168.223.187" 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"
7.3 启动项目
启动的脚本
#!/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
修改权限
chmod 777 start.sh
7.4 关闭项目
#!/bin/bash APP_ID=my-boot ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh