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" ];thenmv $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 ]];thensleep 3tail -n 10 release_out.logsleep 5tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];thenecho "Application started ok"exit 0
elseecho "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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685832.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发控制互斥笔记

整理总结自蒋炎岩老师的b站课程&#xff0c;https://jyywiki.cn/OS/2022/index.html 多处理器系统中数据的一致性和互斥访问 所有的CPU的一级缓存都是连着的&#xff0c;如果是多个CPU的话&#xff0c;用在内存中放置标志位&#xff0c;来保证对当前内容的原子性读取&#xff0…

k8s 理论知识基本介绍

目录 一 k8s 理论前言 &#xff08;一&#xff09;微服务是什么 1&#xff0c;应用场景 2&#xff0c;API 是什么 &#xff08;二&#xff09;&#xff0c;微服务 如何做版本迭代 1. Docker镜像构建 2. 版本标记 3. Docker Registry 4. 环境一致性 5. 滚动更新…

mysql NDBcluster数据库集群介绍、部署及配置

前言: MySQL集群是一个无共享的、分布式节点架构的存储方案,旨在提供容错性和高性能。它由三个主要节点组成:管理节点(MGM)、数据节点和SQL节点。 管理节点(MGM) 定义与用途:管理节点是MySQL Cluster的控制中心,负责管理集群内的其他节点。它提供配置数据,启动和停止…

多址通信方式的抗噪声性能和系统容量对比

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Qt复习第二天

1、菜单栏工具栏状态栏 #include "mainwindow.h" #include "ui_mainwindow.h" #pragma execution_character_set("utf-8"); MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);//菜…

0510_IO5

练习题&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#incl…

第十一讲:指针(3)

第十一讲&#xff1a;指针&#xff08;3&#xff09; 1.字符指针变量1.1存储一个字符1.2存储一个字符串1.3一个有趣的面试题 2.数组指针变量2.1什么是数组指针变量2.2数组指针变量的初始化 3.二维数组传参的本质4.函数指针变量4.1介绍函数指针变量4.2 两段有趣的代码4.2.1代码1…

TP5000是一款开关降压型单节锰锂电池/磷酸铁锂电池充电管理芯片IC

一般概述 TP5000是一款开关降压型单节锰锂电池/磷酸铁锂电池充电管理芯片。其QFN16超小型封装与简单的外围电路&#xff0c;使得TP5000非常适用于便携式设备的大电流充电管理应用。同时&#xff0c;TP5000内置输入过流、欠压保护、芯片过温保护、短路保护、电池温度监控…

videosapi、强大的微信管理api

接口地址&#xff1a;videosapi.com 同步个人收藏夹 {"appId": "{{appid}}","syncKey": "" } 出参 {"ret": 200,"msg": "操作成功","data": {"syncKey": "CAESCAgBEJyi9e4…

设计模式1——初步认识篇

设计模式1——初步认识篇 一、先让我们浅聊一下面向对象和设计模式。 说起设计模式&#xff0c;我第一次听到它&#xff0c;是在学习面向对象的时候。那么什么是面向对象&#xff0c;什么是设计模式&#xff0c;而且设计模式和面向对象又有什么关系呢&#xff1f; 1、什么是面…

G.AB路线【蓝桥杯】/bfs+可重复走

AB路线 bfs可重复走 思路&#xff1a;本题和传统的bfs题目不同&#xff0c;本题为了满足题目先走K个A再走K个B&#xff0c;可能需要重复走某个格子才能继续走下去&#xff0c;故vis数组可以多开一维&#xff0c;vis[x][y][z]表示第z次走到x行y列这种情况是否出现过 A A A B B …

通用型产品发布解决方案(后端环境搭建)

文章目录 后端renren脚手架配置1.解压后放到项目目录下2.新建商品模块1.创建一个新模块 sunliving-commodity2.删除两个不必要的文件3.pom.xml 引入依赖 3.maven进行聚合管理1.将刚才配置的pom.xml文件复制到父项目下并进行修改2.手动将这个pom.xml加入项目&#xff08;如果右下…