Jenkins自动化部署之后端

准备工作参考本人另外几篇Jenkins相关的文章

  1. 新建任务
    在这里插入图片描述

  2. 添加参数配置
    在这里插入图片描述
    字符串参数:分支名称
    在这里插入图片描述
    在这里插入图片描述
    多选框:项目名称(Extended Choice Parameter插件必备,插件安装参考我另外的文章)

在这里插入图片描述
在这里插入图片描述
这个分割规则自定义。只要根据Jenkinsfile脚本处理规则能够对上就可以,此处本人图片是老的,懒得重新替换新的
下面的项目配置才是最新的

travel-system@8201@travel-modules/,travel-auth@8200,travel-gateway@7070,travel-backend@8204@travel-modules/,travel-ticket@8205@travel-modules/

以@分割:
0位标识项目名称
1位标识端口
2位若存在则标识上级目录

在这里插入图片描述

如果项目存在依赖情况B依赖A,需要先部署A才能部署B,则可以通过调整此处项目顺序

在这里插入图片描述
此处如果项目名称没有转换为中文,检查Choose Source for Value Description中描述直接的分割符号是否与前面的相同,假如前面是英文逗号,后面是中文逗号此处也是会有问题
在这里插入图片描述

  1. 配置代码拉去
    在这里插入图片描述
    应用,报存

  2. 配置远程部署服务器

  • 拷贝公钥到远程服务器
ssh-copy-id 远程服务器IP
  • 系统配置->添加远程服务器
    在这里插入图片描述
  1. 参数添加
    多选框:部署服务器
    在这里插入图片描述
    在这里插入图片描述

  2. Harbor的登录凭证ID获取
    在这里插入图片描述
    添加凭证
    在这里插入图片描述
    点击确定之后会生成ID,这个ID将作为Jenkinsfile脚本中的 harbor_auth 参数

Jenkinsfile脚本


//git凭证ID
def git_auth = "896fd2e4-623a-41a3-96ac-e664d92d3f94"
//git的url地址
def git_url = "git@127.0.0.1:xxx/xxxx.git"//镜像的版本号
def tag = "latest"
//Harbor的url地址
def harbor_url = "127.0.0.1"
//镜像库项目名称
def harbor_project = "travel"//Harbor的登录凭证ID
def harbor_auth = "31da7f5d-5f34-4267-989e-9edef7844b01"node {//获取当前选择的项目名称 :项目名称@端口,项目名称@端口,项目名称@端口@父级目录,def selectedProjectNames = "${project_name}".split(",")//获取当前选择的服务器名称def selectedServers = "${publish_server}".split(",")stage("拉取代码") {checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])}stage('编译,安装公共子工程') {sh "mvn -f travel-common clean install"sh "mvn -f travel-api clean install"}stage('编译,打包微服务工程') {for(int i=0;i<selectedProjectNames.length;i++){//tensquare_eureka_server@10086def projectInfo = selectedProjectNames[i];//当前遍历的项目名称def currentProjectName = "${projectInfo}".split("@")[0]//当前遍历的项目端口def currentProjectPort = "${projectInfo}".split("@")[1]//多级目录下的项目上级目录,格式:项目名@端口@上级项目名//非多级目录格式:项目名@端口def packPathArray = "${projectInfo}".split("@")if(packPathArray.size() == 3){def packPath = packPathArray[2]sh "mvn -pl ${packPath}${currentProjectName} clean package dockerfile:build"}else{sh "mvn -f ${currentProjectName} clean package dockerfile:build"}//定义镜像名称def imageName = "${currentProjectName}:${tag}"//对镜像打上标签sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"//把镜像推送到HarborwithCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {//登录到Harborsh "docker login -u ${username} -p ${password} ${harbor_url}"//镜像上传sh "docker push ${harbor_url}/${harbor_project}/${imageName}"sh "echo 镜像上传成功"}//删除本地镜像sh "docker rmi -f ${imageName}"sh "docker rmi -f ${harbor_url}/${harbor_project}/${imageName}"//遍历所有服务器,分别部署for(int j=0;j<selectedServers.length;j++){//获取当前遍历的服务器名称def currentServerName = selectedServers[j]//加上的参数格式:--spring.profiles.active=def activeProfile = "--spring.profiles.active=dev"//根据不同的服务名称来读取不同的配置信息//if(currentServerName=="master_server"){//   activeProfile = activeProfile+"eureka-server1"// }else if(currentServerName=="slave_server"){//   activeProfile = activeProfile+"eureka-server2"// }//部署应用sshPublisher(publishers: [sshPublisherDesc(configName: "${currentServerName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/jenkins_shell/deployCluster.sh $harbor_url $harbor_project $currentProjectName $tag $currentProjectPort $activeProfile", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo "${currentProjectName}完成编译,构建镜像"}}}
}

deployCluster.sh 脚本:

# ! /bin/sh
#接收外部参数
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5
profile=$6imageName=$harbor_url/$harbor_project_name/$project_name:$tagecho "$imageName"#查询容器是否存在,存在则删除
#containerId=`docker ps -a | grep -w ${project_name}:${tag}  | awk '{print $1}'`
containerId=`docker ps -aqf "name=${project_name}"`
echo "容器ID=${containerId}"if [ "$containerId" !=  "" ] ; then#停掉容器docker stop $containerId#删除容器docker rm $containerIdecho "成功删除容器"
fi#查询镜像是否存在,存在则删除
imageId=`docker images | grep -w $project_name  | awk '{print $3}'`
echo "镜像ID=${imageId}"if [ "$imageId" !=  "" ] ; then#删除镜像docker rmi -f $imageIdecho "成功删除镜像"
fi# 登录Harbor
docker login -u admin -p Dx@123456  $harbor_url
echo "Harbor登录成功"# 下载镜像
docker pull $imageName# 启动容器
#docker run -di -p $port:$port $imageName $profile
docker run -di --network host  --name $project_name -v /var/log/travelLogs/$project_name:/logs/$project_name  $imageNameecho "容器启动成功"

问题处理:
在这里插入图片描述
问题原因是文本格式问题,windows和Linux文本格式不一致
解放方案:

  • 使用vim编辑器,可以执行以下命令来进行转换:
:set ff=unix
:wq
  • 批量处理
sed -i 's/[[:cntrl:]]//g' xxx.txt

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

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

相关文章

智能优化算法应用:基于爬行动物算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于爬行动物算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于爬行动物算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.爬行动物算法4.实验参数设定5.算法结果6.…

代码随想录-刷题第三十六天

435. 无重叠区间 题目链接&#xff1a;435. 无重叠区间 思路&#xff1a;本题与452. 用最少数量的箭引爆气球非常像&#xff0c;弓箭的数量就相当于是非交叉区间的数量&#xff0c;只要把弓箭那道题目代码里射爆气球的判断条件加个等号&#xff08;认为[0&#xff0c;1][1&am…

PostGreSQL:货币类型

货币类型&#xff1a;money money类型存储固定小数精度的货币数字&#xff0c;小数的精度由数据库的lc_monetary设置决定。windows系统下&#xff0c;该配置项位于/data/postgresql.conf文件中&#xff0c;默认配置如下&#xff0c; lc_monetary Chinese (Simplified)_Chi…

WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER.

Hadoop启动时警告&#xff0c;但不影响使用&#xff0c;强迫症的我还是决定寻找解决办法 WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.原因是Hadoop安装配置于root用户下&#xff0c;对文件需要进…

《PySpark大数据分析实战》-18.什么是数据分析

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)

目录 介绍 组成部分 PPP帧格式 透明传输 字节填充法 比特填充法 差错检测 工作状态 本篇我们介绍点对点协议PPP 介绍 点对点协议PPP&#xff08;Point-to-Point Protocol&#xff09;是目前使用最广泛的点对点数据链路层协议。 请大家想想看&#xff1a;一般的英特…

哈希拓展攻击CTF题做法

目录 基础&#xff1a; 盐&#xff08;Salt&#xff09;&#xff1a; 哈希长度拓展攻击&#xff1a; kali下载相关工具hash-ext-attack&#xff1a; hash拓展题目特征&#xff1a; 哈希拓展ctf题&#xff1a; 2023楚慧杯upload_shell 实验吧之让我进去&#xff1a; 前言…

nodejs微信小程序+python+PHP计算机网络在线考试系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

编译opencv和opencv_contrib

1 下载源码 下载opencv源码https://github.com/opencv/opencv 下载opencv源码https://github.com/opencv/opencv_contrib 2 开始编译 构建需要下载ffmpeg的包&#xff0c;cmake构建时会自动下载&#xff0c;但是比较满&#xff0c;这里可以从下面链接直接下载 https://downloa…

新版IDEA中Git的使用(一)

说明&#xff1a;本文介绍如何在新版IDEA中使用Git 创建项目 首先&#xff0c;在GitLab里面创建一个项目&#xff08;git_demo&#xff09;&#xff0c;克隆到桌面上。 然后在IDEA中创建一个项目&#xff0c;项目路径放在这个Git文件夹里面。 Git界面 当前分支&Commit …

VSCode软件与SCL编程

原创 NingChao NCLib 博途工控人平时在哪里技术交流博途工控人社群 VSCode简称VSC&#xff0c;是Visual studio code的缩写&#xff0c;是由微软开发的跨平台的轻量级编辑器&#xff0c;支持几乎所有主流的开发语言的语法高亮、代码智能补全、插件扩展、代码对比等&#xff0c…

Java中的抽象abstract

抽象abstract 什么是抽象类抽象类的注意事项、特点 使用好处常见应用场景&#xff1a;模版方法设计模式可以使用final关键字修饰模版方法 什么是抽象类 在Java中有一个关键字叫:abstract&#xff0c;它就是抽象的意思&#xff0c;可以用它修饰类、成员方法。abstract修饰类&am…

openGauss学习笔记-171 openGauss 数据库运维-备份与恢复-导入数据-深层复制

文章目录 openGauss学习笔记-171 openGauss 数据库运维-备份与恢复-导入数据-深层复制171.1 使用CREATE TABLE执行深层复制171.1.1 操作步骤 171.2 使用CREATE TABLE LIKE执行深层复制171.2.1 操作步骤 171.3 通过创建临时表并截断原始表来执行深层复制171.3.1 操作步骤 openGa…

SpringIOC之AbstractMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Python量化投资——金融数据最佳实践: 使用qteasy+tushare搭建本地金融数据仓库并定期批量更新【附源码】

用qteasytushare实现金融数据本地化存储及访问 目的什么是qteasy什么是tushare为什么要本地化使用qteasy创建本地数据仓库qteasy支持的几种本地化仓库类型配置本地数据仓库配置tushare 的API token 配置本地数据源 —— 用MySQL数据库作为本地数据源下载金融历史数据 数据的定期…

超维空间S2无人机使用说明书——31、使用yolov8进行目标识别

引言&#xff1a;为了提高yolo识别的质量&#xff0c;提高了yolo的版本&#xff0c;改用yolov8进行物体识别&#xff0c;同时系统兼容了低版本的yolo&#xff0c;包括基于C的yolov3和yolov4&#xff0c;以及yolov7。 简介&#xff0c;为了提高识别速度&#xff0c;系统采用了G…

c语言的练习---BCD解密

#继续源于c语言翁恺先生 一.分析 初看这道题的时候&#xff0c;可能很多人就想选择放弃&#xff0c;但这道题实在不是考察我们对于编码的能力&#xff1b;而是我们的数学能力。 就拿它的输入样例---18&#xff0c;来举例。 我们来看---在十进制中&#xff0c;是18D&#xf…

锯齿云服务器租赁使用教程

首先登陆锯齿云账号 网盘上传数据集与代码 随后我们需要做的是将所需要的数据集与代码上传到网盘&#xff08;也可以直接在租用服务器后将数据集与代码传到服务器的硬盘上&#xff0c;但这样做会消耗大量时间&#xff0c;造成资源浪费&#xff09; 点击工作空间&#xff1a;…

移除石子使总数最小(LeetCode日记)

LeetCode-1962-移除石子使总数最小 题目信息: 给你一个整数数组 p i l e s piles piles &#xff0c;数组 下标从 0 0 0 开始 &#xff0c;其中 p i l e s [ i ] piles[i] piles[i] 表示第 i i i 堆石子中的石子数量。另给你一个整数 k k k &#xff0c;请你执行下述操作…

无需改动现有网络,企业高速远程访问内网Linux服务器

某企业为数据治理工具盒厂商&#xff0c;帮助客户摆脱数据问题困扰、轻松使用数据&#xff0c;使得客户可以把更多精力投入至数据应用及业务赋能&#xff0c;让数据充分发挥其作为生产要素的作用。 目前&#xff0c;该企业在北京、南京、西安、武汉等地均设有产研中心&#xff…