💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
本人主要分享计算机核心技术:系统维护、数据库、网络安全、自动化运维、容器技术、云计算、人工智能、运维开发、算法结构、物联网、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_64 | damiwang/192.168.9.18 | OpenStack、Docker 等 |
虚拟云主机 | CentOS 7.3-x86_64 | gitlab/192.168.9.13 | Gitlab |
2. 案例环境用到的用户名和密码
表 3-2 案例用到的用户名和密码
类型 | 用户名 | 密码 |
Gitlab | root | bdqn123456 |
MySQL | root | 123456 |
Jenkins | admin | 123456 |
Nexus | admin | admin123 |
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-eureka、dm-gateway-zuul、dm-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-order、pipeline-dm-pay、pipeline-dm-scheduler、pipeline-dm-user。其中每
一个流水线项目都包括对应的 consumer 和 provider 项目。相关项目都创建成果后的结果如
图 3.23 所示。
图 3.23 所有流水线项目
6. 测试业务项目
相 关 的 基 础 服 务 、 业 务 服 务 都 构 建 完 成 后 , 就 可 以 进 行 项 目 测 试 。 访 问
http://192.168.9.18:8888 查看大觅网的首页内容,如图 3.24 所示。
图 3.24 大觅网网站
至此,大觅网项目搭建完成。