大觅网之自动化部署(Automated Deployment of Da Mi Network)

news2024/9/27 10:39:25

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

本人主要分享计算机核心技术:系统维护、数据库、网络安全、自动化运维、容器技术、云计算、人工智能、运维开发、算法结构、物联网、JAVA 、Python、PHP、C、C++等。
不同类型针对性训练,提升逻辑思维,剑指大厂,非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。

大觅网之自动化部署
技能目标:
- 了解 Pipeline 的概念
- 会使用分段生成器生成流水线脚本
- 掌握通过 Pipeline 构建项目的方法

3.1 案例分析

3.1.1 案例概述

某公司最近开发了一套大型票务类电商网站,被命名为大觅网。大觅网为用户提供了通
Web 界面购票的服务,主要功能包括:商品搜索、用户注册登录、商品详情、选座、下
单等功能。大觅网的整个部署过程会用到云计算的相关知识,包括 OpenStack 的多节点部
署、OpenStack 网络路由创建和云主机创建;也会用到 Docker 容器的相关知识,包括
Dockerfile 制作镜像、Docker Compose 多容器关联制作等;还会用到 Jenkins 自动构建发
布大觅网项目。整个项目采用多知识相结合,共同协调配合来完成部署。本章详细介绍大觅
网的基础环境部署。

3.1.2 案例前置知识点

1. Pipeline 简介

Pipeline 又被称作流水线,是 Jenkins 的一套插件。流水线提供了一组可扩展的工具,
用于将简单到复杂的交付流程建模为流水线“代码”。流水线作为一个新功能,是从 Jenkins
2.x 版本开始支持的,基于其重要性现在已经作为推荐插件的一部分。
流水线项目的创建,通常通过以下三种方式:
经典 UI
Blue Ocean
在源码管理系统中定义
“经典 UI”是在 Jenkins 中直接输入基本的流水线;“Blue Ocean”在构建流水线项目
时,会自动编写 Jenkins 文件并提交到源代码仓库中;“在源码管理系统中定义”需要手动
编写 Jenkins 文件,之后在提交到代码仓库中,三者的提交方式不同。
流水线脚本其实也是一种编程语言,它提供了丰富的帮助文档。在 Jenkins 构建页面内
就有内置文档,可方便查看。通过文档的学习和指引可以让项目构建变得更加容易。这些文
档会根据安装的插件不同自动进行调整,同时在需要的地方都有链接地址。为了初学者更快
速的掌握 Pipeline 脚本编写,它还提供了“片段生成器”的功能。该功能有助于各个步骤
创建代码段,实现简单、快速生成 Pipeline 脚本内容,同时可尝试不同的参数进行不同的
调整。
2. Tengine 简介
Tengine 是由淘宝网发起的 Web 服务器项目。针对网站访问量大的需求,它基于开源
软件 Nginx 进行了优化,添加了很多高级功能和特性。Tengine 的性能和稳定性已经在淘宝
网、天猫商城等大型网站得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、
易用的 Web 平台。从 2011 12 月开始,Tengine 成为一个开源项目。Tengine 团队在积
极地开发和维护这个项目,其团队的核心成员来自于淘宝、搜狗等互联网企业,它是社区合
作的成果。

3.1.3 案例环境

1. 本案例实验环境

本案例基于《云原生平台实战》第三、四章中 OpenStack 多节点部署和云主机创建。
OpenStack 上创建两台虚拟云主机作为实验环境,具体云主机环境配置如表 2-1 所示。
3-1 大觅网搭建环境
主机操作系统主机名/IP 地址主要软件
虚拟云主机CentOS 7.3-x86_64damiwang/192.168.9.18OpenStackDocker
虚拟云主机CentOS 7.3-x86_64gitlab/192.168.9.13Gitlab

2. 案例环境用到的用户名和密码

3-2 案例用到的用户名和密码
类型用户名密码
Gitlabrootbdqn123456
MySQLroot123456
Jenkinsadmin123456
Nexusadminadmin123

3. 案例需求

1)所有单项目编译构建的业务实现删除及清理。
2)通过 Pipeline 脚本实现所有业务的部署。

4. 案例实现思路

1)基于业务部署环境,删除所有业务容器、镜像及 Jenkins 缓存。
2)通过 Pipeline 构建 common 基础项目并上传私服仓库。
3)通过 Pipeline 构建相关业务项目并发布。
4)通过浏览器访问测试大觅网。

3.2 案例实施

3.2.1 删除现有业务部署

1.删除现有业务发布容器

大觅网自动发布可直接使用大觅网业务部署搭建完成的环境,将其进行简单改造就可以
开始自动化案例的部署。大觅网的所有业务都是采用容器方式启动的,为了通过 Pipeline
方式重新构建业务容器,所有旧业务容器都需要删除。
[root@damiwang ~]# cd /home/px2/tools/dm
[root@damiwang dm]# docker-compose down
Removing dm_file-consumer_1
... done
Removing dm_base-consumer_1
... done
Removing dm_user-provider_1
... done
Removing dm_user-consumer_1
... done
Removing dm_scheduler-provider_1 ... done
Removing dm_scheduler-consumer_1 ... done
Removing dm_pay-provider_1
... done
Removing dm_pay-consumer_1
... done
Removing dm_order-provider_1
... done
Removing dm_order-consumer_1
... done
Removing dm_item-search_1
... done
Removing dm_item-provider_1
... done
Removing dm_item-consumer_1
... done
Removing dm_base-provider_1
... done
Removing dm_zipkin-server_1
... done
Removing dm_zuul-gateway_1
... done
Removing dm_config-server_1
... done
Removing dm_discovery-eureka_1
... done
Network envdm is external, skipping

2.删除现有业务镜像

大觅网的业务项目在通过 Docker 方式启动之前,都是需要先生成对应的镜像。在开始
自动化部署之前,原有业务镜像也需要删除。
[root@damiwang dm]# docker image rm $(docker image ls | grep ^dm_ | awk '{print $3}')
Untagged: dm_file-consumer:latest
Deleted: sha256:892f23e3fc8f2c95cbc4ff1cda0c0b5ca63067dbdc29d3c79ec691e647346949
Deleted: sha256:de91421b8f2108d02e13fa2add10fddf2aca77bea5e157fb1f763b025dc4a5a5
Deleted: sha256:08c310293b29e4f737316271c101ad1d456a1380d210380200e58e3030c57de9
Deleted: sha256:6aea649938ec67a4572aed1dd5de6e0bd8013c3e4cf29739bed2a6def07616b3
Deleted: sha256:8198ac39fc23034e9b4da66fb136cb2c5552faf0bc9d469f420362c27af9dd9a
Deleted: sha256:8ccfbf538a84eaa4de7652d14a7e022dfcc55b0ca88dfd3c5903b9db77886a39
Untagged: dm_user-provider:latest
...省略部分内容...
Untagged: dm_discovery-eureka:latest
Deleted: sha256:99c656f6ba1e7c2a88364948c2b5793664a5faefa54c412d984ab11bda2dce94
Deleted: sha256:540632374f2b2d71d63b33fcb9e13733b0d9e1961f83be740869aa60cb43a948
Deleted: sha256:4ef2f1eda0af8c913bc3c8dbe53e3337facda683f26737dab8cbd352153711ef
Deleted: sha256:e897cf16cabfd96b469b4a1f1587d5e4eee64c6d8fbcf66e2b01a26c31c284e3
Deleted: sha256:30837158808466c38521e14094621052422b502c6bf50aeab7d1f51d8af8bcd6

Deleted: sha256:f0bec7156c9fabe618596ae55a73c1044eb3ea68aea4ab0a0fd13721da124e76

3.清空 Jenkins 发布缓存

通过 Jenkins 构建的业务项目缓存也需要删除。
[root@damiwang envdm]# pwd
/home/px2/envdm[root@damiwang envdm]# docker-compose exec jenkins bash
[root@538694f400f5 webapps]# rm -rf /root/.jenkins/workspace/*
[root@538694f400f5 webapps]# rm -rf /root/.jenkins/cache

3.2.2 通过 Pipeline 自动化部署业务

1. 安装 Pipeline 插件

Jenkins 流水线项目的构建需要“pipeline”插件的支持。该插件的安装方法为:“系
统管理”“插件管理”“可选插件”选项卡,右上角搜索“pipeline”,找到 Ppeline
插件,如图 3.1 所示。然后,单击“直接安装”按钮进行安装。
3.1 pipeline 插件安装

2. 构建 pipeline-common 流水线

(1)创建流水线视图

进入 Jenkins 首页,单击最上方“所有”选项卡后面的“+”创建 pipeline 视图,如图
3.2 所示。
3.2 创建视图
将新视图命名为 dmw-pipeline,之后单击“确定”按钮,如图 3.3 所示。
3.3 创建 dmw-pipeline 视图
最后,直接单击左下角的“保存”按钮,不需要填写额外信息,保持默认。

(2)新建 pipeline-common 流水线项目

Jenkins 首页单击“新建任务”,项目名称填写“pipeline-common”,项目类型选择
“流水线”,此处的流水线选项是需要 Pipeline 插件的支持的,如果没有安装 Pipeline 插件
则看不到“流水线”选项。之后单击“OK”创建项目,如图 3.4 所示。
3.4 pipeline-common 流水线项目创建
进入到“pipeline-common”流水线项目的配置页面,直接下拉到“流水线”模块。在
“定义”的下拉框内选择“Scripted Pipeline”,“Script”代码框内右侧的下拉框内同样选
择“Scripted Pipeline”,此时会列出 Pipeline 脚本基础语法架构。当前显示的只是一个示
例,实际的 Pipeline 脚本编写完成后也是类似的结构,如图 3.5 所示。
3.5 Pipeline 脚本示例
之前大觅网业务部署,在进行 dm-base-consumer 项目构建时,整个构建过程可以分
为拉取代码、编译、编译后执行命令三个部分。为了降低 Pipeline 脚本的编写难度,官方
提供了“分段生成器”功能,它可以帮助生成 Pipeline 脚本,简化书写步骤。本案例就通
过“分段生成器”来辅助编写 Pipeline 脚本。单击 Pipeline 模块下的“流水线语法”(如
3.5 左下角的链接),之后进入到“分段生成器”界面,如图 3.6 所示。
3.6 分段生成器界面
单击“示例步骤”下拉框,选择“git: Git”,就会出现之前单个项目配置时的代码拉取
界面,如图 3.7 所示。
3.7 分段生成器的 Git 配置界面
“仓库 URL”填写“common”项目的代码拉取地址,“凭据”选择对应的凭据,然
后单击“生成流水线脚本”按钮生成 Pipeline 脚本对应的语句。这条语句就可以应用到
Pipeline 脚本内。分段生成器辅助生成的语句可以简化 Pipeline 脚本的编写,避免手动一条
条的去编写,减少了错误的出现,提高了工作效率。
复制该语句到“pipeline-common”项目配置页,填入 Pipeline 脚本内,填入之前先清
空之前的示例。如图 3.8 所示。
3.8 Pipeline 脚本内 Git 配置
上述 Pipeline 脚本的具体内容如下。
node {
stage('Clone') {
echo "git clone common"
git
credentialsId:
'811f040f-8e2f-4424-8f60-0f92f8080e91',
url:
'http://192.168.9.13/root/common.git'
}
}
脚本内的“node”是流水线分配的一个执行区域,“stage”是区域内的执行步骤。
回到“分段生成器”界面,进行“Build”第二阶段的代码生成。要实现“Build”需要
切换到目录“/root/.jenkins/workspace/pipeline-common/dm-common/”使用“dir: Change
current directory”来辅助实现代码语句的生成,如图 3.9 所示。
3.9 分段生成器切换目录
“示例步骤”选择“dir: Change current directory”,“Path”填写要切换的路径,单
击“生成流水线脚本”按钮。切换目录是为了进行编译,通过直接调用 sh 命令实现,应用
到流水脚本后为 sh mvn clean deploy -Dmaven.test.skip=true”,将编译命令和切换命
令相结合就构成了“Build”的完整流水线脚本,如图 3.10 所示。
3.10 Build 阶段流水线脚本
上述 Pipeline 脚本的具体内容如下。
node {
stage('Clone') {
echo "git clone common"
git
credentialsId:
'811f040f-8e2f-4424-8f60-0f92f8080e91',
url:
'http://192.168.9.13/root/common.git'
}
}
node {
stage('Build') {
echo "begin build"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
由于 common 项目属于基础支持项目,并不需要发布,所以没有通过 Docker 发布的内
容,只需要将 common 项目及其六个子项目分别加入进来进行构建即可。这六个子项目的
dm-common-module→dm-common-dto→dm-common-dao→dm-common-client→dm-co
mmon-utils→dm-common-ext-utils,加入步骤可参考 dm-common 项目。完整的 Pipeline
脚本内容如下。
node {
stage('Clone') {
echo "git clone common"
git
credentialsId:
'811f040f-8e2f-4424-8f60-0f92f8080e91',
url:
'http://192.168.9.13/root/common.git'
}
}
node {
stage('Build dm-common') {
echo "begin dm-common"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Build dm-common-module') {
echo "begin dm-common-module"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/dm-common-module/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Build dm-common-dto') {
echo "begin dm-common-dto"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/dm-common-dto/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Build dm-common-dao') {
echo "begin dm-common-dao"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/dm-common-dao/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Build dm-common-client') {
echo "begin dm-common-client"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/dm-common-client/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}stage('Build dm-common-utils') {
echo "begin dm-common-utils"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/dm-common-utils/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Build dm-common-ext-utils') {
echo "begin dm-common-ext-utils"
dir('/root/.jenkins/workspace/pipeline-common/dm-common/dm-common-ext-utils/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
}
可以看到代码的拉取作为一个 node,其他的子项目 Buid 是放到一起的,这样不用每个
子项目都要去拉取一次代码,简化了 Buid 过程。
将上述完整 Pipeline 脚本保存入项目后。单击左侧菜单栏中的“立即构建”,所有步
骤都构建成功后即可出现如图 3.11 所示页面。
3.11 pipeline-common 项目构建
3. 构建 pipeline-dm-env 项目
Pipeline-dm-env 流 水 线 项 目 包 括 的 四 个 子 项 目 分 别 是 : dm-config-server
dm-discovery-eurekadm-gateway-zuuldm-zipkin-server。跟上面 pipeline-common
目类似,这四个子项目也需要逐个加入 pipeline-dm-env 流水线项目内。
在“dmw-pipeline”视图中新建“pipeline-dm-env”项目。单击“新建任务”,项目名
称处填写“pipeline-dm-env”,同样选择“流水线”项目类型,单击“OK”按钮创建该项
目,如图 3.12 所示。
3.12 pipeline-dm-env 项目创建
在“流水线”模块内填入流水线脚本代码,相关代码依旧可以通过分段生成器来辅助编
写,通过“流水线语法”进入分段生成器。如图 3.13 所示。
3.13 pipeline 脚本输入框
使用分段生成器生成拉取 Git 仓库代码,“示例步骤”选择“git: Git”,“仓库 URL
填写“http://192.168.9.13/root/env-project.git”,“凭据”选择对应的 damiwang 凭据,之
后单击“生成流水线脚本”生成 pipeline 脚本语句,如图 3.14 所示。
3.14 分段生成器生成拉取代码语句
Build”阶段的代码语句可直接复制 pipeline-common 的内容,然后修改切换路径的
地址。以子项目 dm-discovery-eureka 为例,Pipeline 脚本内容如下所示。
stage('Build dm-discovery-eureka') {
echo "maven build dm-discovery-eureka"
dir('/root/.jenkins/workspace/pipeline-dm-env/dm-discovery-eureka/') {
sh "mvn clean package -Dmaven.test.skip=true"
}
}
Pipeline-dm-env 流水线项目相对于 pipeline-common 多了发布的过程,发布 Deploy
的脚本代码同样可以通过分段生成器来生成。在分段生成器内选择“sshPublisher: Send
build artifacts over SSH”,填入 dm-discovery-eureka 项目的发布参数:“Name”选择对
应的发布服务器;“Source files”填写“dm-discovery-eureka/target/*.jar”;“Remove prefix
填写“dm-discovery-eureka/target/”;“Remote directory”填写“dm/dm-discovery-eureka
;
Exec command”填写
cd /home/px2/tools/dm
sudo `which docker-compose` stop config-server
sudo `which docker-compose` build config-server
sudo `which docker-compose` up -d config-server
页面效果如图 3.15 所示。
3.15 分段生成器 SSH Publisher 填写
填写完成后,单击“生成流水线脚本”按钮生成流水线代码。如图 3.16 所示。
3.16 SSH Publisher 流水线代码生成
将拉取代码、编译和编译后执行的命令三个部分生成的代码拷贝到流水线脚本内,生成
dm-discovery-eureka 项目的流水线脚本。同时,也可以将另外三个项目依照上述步骤加入
到流水线脚本内,最终的完整流水线脚本内容如下所示。
node {
stage('Clone dm-discovery-eureka') {
echo "git clone dm-discovery-eureka"
git
credentialsId:
'811f040f-8e2f-4424-8f60-0f92f8080e91',
url:
'http://192.168.9.13/root/env-project.git'
}
}
node {
stage('Build dm-discovery-eureka') {
echo "maven build dm-discovery-eureka"
dir('/root/.jenkins/workspace/pipeline-dm-env/dm-discovery-eureka/') {
sh "mvn clean package -Dmaven.test.skip=true"
}
}
stage('Deploy dm-discovery-eureka') {
echo "docker deploy dm-discovery-eureka"
sshPublisher(publishers:
[sshPublisherDesc(configName:
'server9.18',
transfers:
[sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/px2/tools/dm
sudo `which docker-compose` stop discovery-eureka
sudo `which docker-compose` build discovery-eureka
sudo `which docker-compose` up -d discovery-eureka''', execTimeout: 120000, flatten: false,
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory:
'dm/dm-discovery-eureka', remoteDirectorySDF: false, removePrefix: 'dm-discovery-eureka/target/',
sourceFiles:
'dm-discovery-eureka/target/*.jar')],
usePromotionTimestamp:
false,
useWorkspaceInPromotion: false, verbose: false)])
}
}
node {
stage('Build dm-config-server') {
echo "maven build dm-config-server"
dir('/root/.jenkins/workspace/pipeline-dm-env/dm-config-server/') {
sh "mvn clean package -Dmaven.test.skip=true"
}
}
stage('Deploy dm-config-server') {
echo "docker deploy dm-config-server"
sshPublisher(publishers:
[sshPublisherDesc(configName:
'server9.18',
transfers:
[sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/px2/tools/dm
sudo `which docker-compose` stop config-server
sudo `which docker-compose` build config-server
sudo `which docker-compose` up -d config-server''', execTimeout: 120000, flatten: false,
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory:
'dm/dm-config-server', remoteDirectorySDF: false, removePrefix: 'dm-config-server/target/',
sourceFiles:
'dm-config-server/target/*.jar')],
usePromotionTimestamp:
false,
useWorkspaceInPromotion: false, verbose: false)])
}
}
node {
stage('Build dm-gateway-zuul') {
echo "maven build dm-gateway-zuul"
dir('/root/.jenkins/workspace/pipeline-dm-env/dm-gateway-zuul/') {
sh "mvn clean package -Dmaven.test.skip=true"
}
}
stage('Deploy dm-gateway-zuul') {
echo "docker deploy dm-gateway-zuul"
sshPublisher(publishers:
[sshPublisherDesc(configName:
'server9.18',
transfers:
[sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/px2/tools/dm
sudo `which docker-compose` stop zuul-gateway
sudo `which docker-compose` build zuul-gateway
sudo `which docker-compose` up -d zuul-gateway''', execTimeout: 120000, flatten: false,
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory:
'dm/dm-gateway-zuul', remoteDirectorySDF: false, removePrefix: 'dm-gateway-zuul/target/',
sourceFiles:
'dm-gateway-zuul/target/*.jar')],
usePromotionTimestamp:
false,
useWorkspaceInPromotion: false, verbose: false)])
}
}
node {
stage('Build dm-zipkin-server') {
echo "maven build dm-zipkin-server"
dir('/root/.jenkins/workspace/pipeline-dm-env/dm-zipkin-server/') {
sh "mvn clean package -Dmaven.test.skip=true"
}
}
stage('Deploy dm-zipkin-server') {
echo "docker deploy dm-zipkin-server"
sshPublisher(publishers:
[sshPublisherDesc(configName:
'server9.18',
transfers:
[sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/px2/tools/dm
sudo `which docker-compose` stop zipkin-server
sudo `which docker-compose` build zipkin-server
sudo `which docker-compose` up -d zipkin-server''', execTimeout: 120000, flatten: false,
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory:
'dm/dm-zipkin-server', remoteDirectorySDF: false, removePrefix: 'dm-zipkin-server/target/',
sourceFiles:
'dm-zipkin-server/target/*.jar')],
usePromotionTimestamp:
false,
useWorkspaceInPromotion: false, verbose: false)])
}
}
脚本内容填写完成,保存退出后,单击“立即构建”,进行项目的编译和发布工作。执
行成功的结果,如图 3.17 所示。
3.17 pipeline-dm-env 项目构建成功
4. 构建 pipeline-dm-base 项目
Pipeline-dm-base 流 水 线 项 目 包 括 两 个 子 项 目 , 分 别 是 dm-base-consumer
dm-base-provider。在 Jenkins 首页单击“新建任务”,创建 pipeline-dm-base 流水线项目,
如图 3.18 所示。
3.18 pipeline-dm-base 流水线项目创建通过“流水线语法”进入分段生成器,如图 3.19 所示。
3.19 pipeline-dm-base 项目流水线脚本配置界面
通过分段生成器生成拉取 Git 仓库代码部分流水线脚本,如图 3.20 所示。
3.20 拉取代码流水线脚本生成
项目编译 Build 部分同样采用拷贝修改的方法,如下所示。
stage('Build dm-base-consumer') {
echo "build dm-base-consumer"
dir('/root/.jenkins/workspace/pipeline-dm-base/dm-base-consumer/') {
sh ''mvn clean package -Dmaven.test.skip=true
}
}
以上编译过程需要切换到对应的 dm-base-consumer 目录下,之后再进行项目的编译。
在“分段生成器”上选用“sshPublisher: Send build artifacts over SSH”,填写基于
SSH 的相关发布命令,如图 3.21 所示。
3.21 分段生成器生成发布命令填入
单击“生成流水线脚本”按钮,生成 Pipeline 脚本所需的代码片段,如图 3.22 所示。
3.22 dm-base-consumer 生成对应流水线脚本语句
以上是 dm-base-consumer 项目的生成过程,另一个项目 dm-base-provider 的生成过
程也类似。二者都生成完成后,可形成完整的流水线脚本,内容如下所示。
node {
stage('Clone dm-base-consumer') {
echo "git clone dm-base-consumer"
git
credentialsId:
'811f040f-8e2f-4424-8f60-0f92f8080e91',
url:
'http://192.168.9.13/root/base-consumer.git'
}
stage('Build dm-base-consumer') {
echo "build dm-base-consumer"
dir('/root/.jenkins/workspace/pipeline-dm-base/dm-base-consumer/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Deploy dm-base-consumer') {
echo "deploy dm-base-consumer"
sshPublisher(publishers:
[sshPublisherDesc(configName:
'server9.18',
transfers:
[sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/px2/tools/dm
sudo `which docker-compose` stop base-consumer
sudo `which docker-compose` build base-consumer
sudo `which docker-compose` up -d base-consumer''', execTimeout: 120000, flatten: false,
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory:
'dm/dm-base-consumer', remoteDirectorySDF: false, removePrefix: 'dm-base-consumer/target/',
sourceFiles:
'dm-base-consumer/target/*.jar')],
usePromotionTimestamp:
false,
useWorkspaceInPromotion: false, verbose: false)])
}
}
node {
stage('Clone dm-base-provider') {
echo "git clone dm-base-provider"
git
credentialsId:
'811f040f-8e2f-4424-8f60-0f92f8080e91',
url:
'http://192.168.9.13/root/base-provider.git'
}
stage('Build dm-base-provider') {
echo "build dm-base-provider"
dir('/root/.jenkins/workspace/pipeline-dm-base/dm-base-provider/') {
sh 'mvn clean deploy -Dmaven.test.skip=true'
}
}
stage('Deploy dm-base-provider') {
echo "deploy dm-base-provider"
sshPublisher(publishers:
[sshPublisherDesc(configName:
'server9.18',
transfers:
[sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/px2/tools/dm
sudo `which docker-compose` stop base-provider
sudo `which docker-compose` build base-provider
sudo `which docker-compose` up -d base-provider''', execTimeout: 120000, flatten: false,
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory:
'dm/dm-base-provider', remoteDirectorySDF: false, removePrefix: 'dm-base-provider/target/',
sourceFiles:
'dm-base-provider/target/*.jar')],
usePromotionTimestamp:
false,
useWorkspaceInPromotion: false, verbose: false)])
}
}
项目保存退出后,同样单击“立即构建”按钮,完成 pipeline-dm-base 项目的构建。
5. 构建其他业务项目
除了以上项目外,还需要构建另外的五个流水线项目,分别是:pipeline-dm-item
pipeline-dm-orderpipeline-dm-paypipeline-dm-schedulerpipeline-dm-user。其中每
一个流水线项目都包括对应的 consumer provider 项目。相关项目都创建成果后的结果如
3.23 所示。
图 3.23 所有流水线项目
6. 测试业务项目
相 关 的 基 础 服 务 、 业 务 服 务 都 构 建 完 成 后 , 就 可 以 进 行 项 目 测 试 。 访 问
http://192.168.9.18:8888 查看大觅网的首页内容,如图 3.24 所示。
3.24 大觅网网站
至此,大觅网项目搭建完成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革

除了调用别人的api接口使用transformer技术,你是否想过将大模型在浏览器中运行呢?尤其是WebGPU的出现,性能比WebGL高不少,很多小任务真的不再需要在一个中心运行了。 不少同学买课学python了,但我还是在坚持用js尝试&a…

【Linux实践】实验九:Shell流程控制语句

【Linux实践】实验九:Shell流程控制语句 实验目的实验内容实验步骤及结果1. 变量的定义和使用2. 条件3. 运算4. if 语句5. case 语句6. for 语句7. while 语句8. until 语句9. 遍历复制10. 计算平方 实验目的 1、掌握条件判断语句,如if语句、case语句。…

tomcat的安装,管理与配置

目录 Tomcat 服务部署 1.关闭防火墙,将安装 Tomcat 所需软件包上传到虚拟机 2.安装JDK 3.设置JDK环境变量 4.安装启动Tomcat 5.启动tomcat 6.优化tomcat启动速度 Tomcat 服务管理 systemd 管理控制 supervisor 管理控制 Tomcat 虚拟主机配置 1.创建 sun…

EE trade:黄金 999 和黄金 9999 的区别

黄金, 作为一种珍贵的金属, 一直是人们投资和收藏的对象。 在购买黄金时, 您可能会遇到两种纯度的黄金 —— 黄金 999 和黄金 9999。 这两种黄金有什么区别? 消费者应该如何选择呢? 一、 黄金 999 和黄金 9999 的区别 含金量:…

OCR 行驶证识别 离线识别

目录 正页识别 副页识别 全部识别 OCR 行驶证识别 离线识别 正页识别 副页识别 全部识别

C语言实现归并排序(Merge Sort)

目录 一、递归实现归并排序 1. 归并排序的基本步骤 2.动图演示 3.基本思路 4.代码 二、非递归实现 1.部分代码 2.代码分析 修正后代码: 归并过程打印 性能分析 复杂度分析 归并排序是一种高效的排序算法,采用分治法(Divide and Con…

中电金信:“源启”金融级数字底座

01方案简介 金融级数字底座是中电金信依托中国电子自主安全计算产业链,采用新一代技术架构,为金融及重点行业打造的数字化新型基础设施。 “源启”面向金融等重点行业场景,依照系统工程方法论,进行全栈技术产品的验证、适配和调…

word2vector训练数据集整理(代码实现)

import math import os import random import torch import dltools from matplotlib import pyplot as plt #读取数据集 def read_ptb():"""将PTB数据集加载到文本行的列表中"""with open(./ptb/ptb.train.txt) as f:raw_text f.read()return…

【深度学习基础模型】双向循环神经网络(Bidirectional Recurrent Neural Networks, BiRNN)详细理解并附实现代码。

【深度学习基础模型】双向循环神经网络(Bidirectional Recurrent Neural Networks, BiRNN) 【深度学习基础模型】双向循环神经网络(Bidirectional Recurrent Neural Networks, BiRNN)详细理解并附实现代码。 文章目录 【深度学习…

使用 Llama 3.1 和 Qdrant 构建多语言医疗保健聊天机器人的步骤

长话短说: 准备好深入研究: 矢量存储的复杂性以及如何利用 Qdrant 进行高效数据摄取。掌握 Qdrant 中的集合管理以获得最佳性能。释放上下文感知响应的相似性搜索的潜力。精心设计复杂的 LangChain 工作流程以增强聊天机器人的功能。将革命性的 Llama …

虚幻蓝图Ai随机点移动

主要函数: AI MoveTo 想要AI移动必须要有 导航网格体边界体积 (Nav Mesh Bounds Volume) , 放到地上放大 , 然后按P键 , 可以查看范围 然后创建一个character类 这样连上 AI就会随机运动了 为了AI移动更自然 , 取消使用控制器旋转Yaw 取消角色移动组件 的 使用控制器所需的…

风扇模块(直流5V STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 fan.h文件 fan.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 直流风扇(Fan),具有高转速、大风量、低噪音、低能耗和低震动的特点,有DC5V和12V两种型号可供…

【HarmonyOS】Web组件同步与异步数据获取

Web组件交互同步与异步获取数据的方式示例 【html测试文件】src/main/resources/rawfile/Page04.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><script>let isEnvSupported CSS in window &&…

云上攻防 | AWS中的常见 Cognito 配置错误

引言 AWS Cognito 是由亚马逊网络服务&#xff08;AWS&#xff09;提供的全托管服务&#xff0c;旨在简化 Web 和移动应用程序的用户认证和授权过程。它提供了一整套功能来处理用户注册、登录和用户管理&#xff0c;免去了开发人员从头构建这些功能的需求。 尽管本文讨论的攻…

8.11 矢量图层线要素单一符号使用二(箭头)

8.11 矢量图层线要素单一符号使用二(箭头)_qgis箭头-CSDN博客 目录 前言 箭头&#xff08;Arrow&#xff09; QGis设置线符号为箭头(Arrow) 二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中箭头&#xff08;Arrow&#xff09;的使用说明&#xff1a;文章中…

等保2.0数据库测评之达梦数据库测评

一、达梦数据库介绍 达梦数据库管理系统属于新一代大型通用关系型数据库&#xff0c;全面支持 ANSI SQL 标准和主流编程语言接口/开发框架。行列融合存储技术&#xff0c;在兼顾 OLAP 和 OLTP 的同时&#xff0c;满足 HTAP 混合应用场景。 本次安装环境为Windows10专业版操作…

华夏ERP3.1权限绕过代码审计

POC: /jshERP-boot/user/getAllList;.ico 调试分析poc: 这是poc很明显就是绕过权限&#xff0c;我们分析filter里面的代码。 Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {Htt…

基于Spring Boot的校园管理系统

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自…

使用API有效率地管理Dynadot域名,设置域名服务器(NS)

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

SQL Server的文本和图像函数

新书速览|SQL Server 2022从入门到精通&#xff1a;视频教学超值版_sql server 2022 出版社-CSDN博客 《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) SQL Se…