jenkins持续集成框架

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

相关推荐

  1. Jenkins持续集成

    2024-05-11 01:28:13       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 01:28:13       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 01:28:13       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 01:28:13       87 阅读
  4. Python语言-面向对象

    2024-05-11 01:28:13       96 阅读

热门阅读

  1. MyBatis中if判断(踩坑)

    2024-05-11 01:28:13       31 阅读
  2. Android应用开发-回声消除AEC

    2024-05-11 01:28:13       42 阅读
  3. 设计模式——迭代器模式(Iterator)

    2024-05-11 01:28:13       32 阅读
  4. MySQL环境搭建

    2024-05-11 01:28:13       34 阅读
  5. 产业链图谱在优化供应链管理中的作用

    2024-05-11 01:28:13       35 阅读
  6. Channel实现Flutter与原生平台之间的双向通信

    2024-05-11 01:28:13       27 阅读
  7. 达梦数据库常用命令整理

    2024-05-11 01:28:13       25 阅读
  8. Android 11.0 mtk平台系统添加公共so库的配置方法

    2024-05-11 01:28:13       31 阅读
  9. VUE中可适化大屏的自适应

    2024-05-11 01:28:13       33 阅读
  10. 飞天使-k8s知识点29-kubernetes安装1.28.0版本

    2024-05-11 01:28:13       27 阅读