云计算
左边是我的个人微消息。如需进一步交流,请加好友。右边是我的微信官方账号“Openstack私有云”。有兴趣的请关注。
我很早就想实践所谓的CI/CD持续集成开发,主要是工作中没有用到,对开发领域也不是特别熟悉。现在基础设施自动化只是为上层应用服务,开发部门也是大爷,需要我好好服务,哈哈。
简要介绍CI/CD的概念,字面意思是持续集成/持续部署或交付,如下:
持续集成(CI):在持续集成环境中,开发人员会频繁提交代码测试(一天多次),他们必须在构建之前通过单元测试。如果一个测试用例失败了,集成就无法继续,以便快速发现问题并修复它们。然后构建、部署、测试代码,再反馈测试结果,这个过程不断执行。
持续部署(CD):持续部署可以灵活地将项目部署到任何环境,如测试环境、预生产环境、生产环境,以便质量团队或用户使用,发现问题,反馈意见。
连续交付(CD):将最终产品发布到生产环境供用户使用。
下图是通过git docker register Jenkins docker实现CI/CD的简单示意图(来自互联网)。
可以看到逻辑关系还是很简单的,就是开发者上传开发代码到git,触发Jenkins的自动代码编译并构建镜像,将镜像推送到docker仓库,比如Harbor,测试环境或者生产环境,然后从docker仓库拉映像部署。
废话不多说,开始规划吧。
发布过程如下:
1.开发语言:Java
2.项目代码版本管理:Git
3.代码编译:Maven
4.持续集成:Jenkins
5.发货:以Docker镜像的形式发货,提交到镜像仓库。
6.部署:Docker主机创建容器
环境规划如下:
詹金斯
192.168.1.45
git/注册表
操作系统:CentOS7.2
镜像名称格式:
项目名称-模块名称:代码版本(标签)
工作流程:
1.开发者将代码提交到Git版本仓库;
2.Jenkins手动/定期触发项目建设;
3.詹金斯拉代码,编译代码,打包镜像,推送到镜像仓库;
4.Jenkins在Docker主机上创建一个容器并发布它。
部署Git仓库
在192.168.1.44主机上安装Git,如下所示:
安装Git
#yuminstallgit-y
2.创建一个Git用户并设置密码。
#useraddgit
#echogit|passwd - stdingit
创建仓库
苏-吉特
mkdirsolo.git
cdsolo.git
git - bareinit
4.访问创建的仓库。
# gitclonegit @ 192 . 168 . 1 . 44:/home/git/solo . git
将项目上传到Git仓库
我从Github找到了一个开源的JAVA博客项目作为演示。
拉代码
# git clone https://github . com/B3 log/solo . git
添加私人仓库地址
#cdsolo/
#gitremoteremoveorigin
# gittremoteaddorigingit @ 192 . 168 . 1 . 44:/home/git/solo . git
提交给私人仓库
#gitadd。
#gitcommit-m'all '
# gitpushoriginmaster
在192.168.1.45安装Docker并配置Java环境,如下所示:
1.安装依赖包
# Yu install-yyum-utils device-mapper-persistent-data LVM 2
2.添加Docker包源:
#yum-config-manager\\\\
-添加-repo\\\\
https://download.docker.com/linux/centos/docker-ce.repo
安装DockerCE
#yuminstalldocker-ce-y
配置加速器
# curl-SSL https://get . Dao cloud . io/Dao tools/set _ mirror . sh | sh-s http://BC 437 CCE . m . Dao cloud . io
5.启动和引导
# systemctlstartdocker
#systemctlenabledocker
6.安装Java和Maven环境。
首先,在oracle官网下载jdk安装包jdk-8u192-linux-x64.tar.gz。
# tarzxfjdk-8u 192-Linux-x64 . tar . gz
# mvjdk 1 . 8 . 0 _ 192/usr/local/JDK 1.8
# wget https://archive . Apache . org/dist/maven/maven-3/3 . 5 . 4/binaries/Apache-maven-3 . 5 . 4-bin . tar . gz
# tarzxfapache-maven-3 . 5 . 4-bin . tar . gz
# mvapache-maven-3 . 5 . 4/usr/local/maven 3.5
#vi/etc/profile
MAVEN_HOME=/usr/local/maven3.5
JAVA_HOME=/usr/local/jdk1.8
PATH=$ PATH:$ JAVA _ HOME/bin:$ MAVEN _ HOME/bin
类路径=。$ JAVA _ HOME/lib/dt . jar:$ JAVA _ HOME/lib/tools . jar
exportJAVA_HOMEPATHCLASSPATH
#source/etc/profile
7.安装饭桶,需要在詹金斯运行管道的时候需要用到git:
yuminstallgit-y
安装詹金斯
詹金斯是一个开源软件项目,是基于Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)开发的一种持续集成工具,用于代码编译、部署、测试等工作。
詹金斯也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署战争包方式安装它。
下载地址:詹金斯https://号。io/下载
在192.168.1.46主机安装詹金斯,下载雄猫二进制包将战争包到webapps下即可:
先安装Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)环境,
# tarzxfjdk-8u 192-Linux-x64。焦油。地面零点
# mvjdk 1。8 .0 _ 192/美国/当地/JDK 1.8
#vi/etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$PATH:$JAVA_HOME/bin
类路径=。$ JAVA _ HOME/lib/dt。jar:$ JAVA _ HOME/lib/tools。冲突
exportJAVA_HOMEPATHCLASSPATH
#source/etc/profile
# wget http://镜子。詹金斯。io/战稳/最新/詹金斯。战争
# wget http://镜子。舒。edu。cn/Apache/Tomcat/Tomcat-8/v 8。5 .37/bin/阿帕奇-雄猫-8。5 .37 .焦油。地面零点
# tarzxfapache-Tomcat-8。5 .37 .焦油。地面零点
# mvapache-Tomcat-8。5 .37/美国海军/地方/雄猫-詹金斯
# RM/usr/local/Tomcat-Jenkins/web apps/*-RF
#拉开詹金斯的拉链。war-d/usr/local/Tomcat-Jenkins/web apps/ROOT
# CD/usr/local/Tomcat-Jenkins/bin/
#./startup.sh
#tail-f./logs/catalina.out
.
jenkinsinitialsetupisrequired。anadminuserhasbeencreatedapasswordegenerated .
请使用以下passwordtoproceedtoinstallation:
a 832 e 00 BC 8c 3484698 f 74862 a 3a 2459 a
这也可能位于:/root/.詹金斯/秘密/初始密码
.
部署成功,访问詹金斯:http://192.168.1.46:8080
注意在防火墙上将8080端口打开:
防火墙-cmd附加端口=8080/tcp
防火墙-cmd附加端口=8080/TCP永久
输入上面日志输出的密码:a 832 e 00 BC 8 c 3484698 f 74862 a 3a 2459 a,或者从本机/root/.詹金斯/秘密/初始密码文件获取,点击继续,选择安装推荐的插件。
等待一会儿安装插件完成。之后创建第一个管理用户:
账号密码管理。接下来对詹金斯进行配置:
名称:从节点名字
并发构建数:同一时间下发该奴隶最大任务数
远程工作目录:从上的工作目录
标签:标记,用于识别哪一个奴隶
用法:只负责职位标记到该奴隶的任务
启动方式:Linux从机一般采用嘘连接
主机:从属互联网协议(Internet Protocol)地址,这里是码头工人主机互联网协议(互联网协议)
凭据:选择刚创建的凭据,宋承宪连接到该主机的用户名和密码
Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)路径:从上Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)绝对路径
添加新节点之后,需要连接这个码头工人节点,首次连接的时候回报错ssh _主机没有保存这个地址的公钥,需要在后台直接使用嘘登录一下192.168.1.45 ,如下:
【root @ Jenkins secrets】# ssh 192。168 .1 .45
主机192.168.1.45(192.168.1.45)的真实性不能成立。
ecdsakeyfingerprintis 64:B6:7a:B9:9d:65:E2:57:3f:61:D8:DC:6c:cc:6a:78 .
您是否希望继续连接(是/否)?是
警告:已将"192 .168 .1 .45英寸(ECD sa)永久添加到已知主机列表中。
root @ 192。168 .1 .45英寸密码:
最后登录:星期六217:34:392019从192.168.1.22
[root@docker~]#
之后就能正确登录新节点,如下:
授权码头工人主机免交互拉取饭桶仓库
在码头工人主机192.168.1.45 创建密钥对:
#ssh-keygen#一路回车
#ssh-copy-idgit@192.168.1.44
测试免交互登录:
#sshgit@192.168.1.44
新建任务
管道是一套运行于詹金斯上的工作流框架,将原来独立运行的单个或多个任务连续起来,发布流程使用绝妙的脚本书写整个生命周期,并且支持从代码库直接读取该脚本,这种理念是目前CI/CD的最佳实践。
詹金斯文件内容如下:
节点(' 192.168.1.45'){//指定奴隶标签
//拉取代码
stage('GitCheckout'){
checkout([$class:'GitSCM '分支:[[name:$ Tag ']],dogeneratesubmoduleconfiguration s:false,extensions:[],submulecfg:[],userRemoteConfigs:[[URL:' git @ 192。168 .1 .44:/home/git/solo。git ']])
}//$标签引用用户交互输入的标签
//代码编译
stage('MavenBuild'){
"嘘"
导出Java _ HOME=/usr/local/JDK 1.8
/usr/local/maven 3.5/bin/mvncleanpackage-dmaven。测试。跳过=真
'''
}
//项目打包到镜像并推送到镜像仓库
stage('BuildandPushImage'){
"嘘"
储存库=192。168 .1 .44/库/solo:$ { Tag }
catDockerfileEOF
从192年开始。168 .1 .44/库/Tomcat:最新
RUNrm-RF/usr/local/Tomcat/web apps/ROOT
COPYtarget/* .war/usr/local/Tomcat/web apps/root。战争
CMD['catalina.sh '' run']
文件结束
码头建造费仓库。
docker登录-uywb-pyourpassword 192。168 .1 .44
dockerpush$REPOSITORY
'''
//根据$标签作为镜像版本号
}
//部署到码头工人主机
stage('DeploytoDocker'){
"嘘"
储存库=192。168 .1 .44/库/solo:$ { Tag }
dockerrm-fblog-solo|true
dockerimagerm$REPOSITORY|true
docker登录-uywb-pyourpassword 192。168 .1 .44
docker container run-d-name blog-solo-v/usr/local/JDK 1.8:/usr/local/JDK-p88:8080 $ REPOSITORY
'''
}
}
在192.168.1.44 上模拟提交代码创建标签:
[git@harborsolo]$cdsolo
【git @ harbor solo】$ touch src/main/web app/123。文本文件(textfile)
[git@harborsolo]$gitadd .
[git@harborsolo]$gitcommit-m'1 '
[masterfca1bcb]1
一文件已更改,0插入( ),0删除(-)
创建模式100644 src/main/web app/123。文本文件(textfile)
[git@harborsolo]$gittag1.0.0
【git @ harbor solo】$ git push origin 1。0 .0
git @ 192。168 .1 .44英寸密码:
计数对象:10,完成。
deltacompressionusingupto2threads .
压缩对象:100%(5/5),完成。
写入对象:100%(6/6),438字节| 0字节/秒,完成。
总计6(增量3),重复使用1(增量0)
togit @ 192。168 .1 .44:/home/git/solo。饭桶
*[新标签]1.0.0-1.0.0
[git@harborsolo]$
发布测试!!
自动化构建部署是成功了,在构建过程中可以直接看创造历史中的安慰输出,如下:
具体内容如下,以供参考:
Startedbyuseradministrator
运行耐久性级别:MAX _ SURVIVABILITY
[管道]管道起点
[管道]节点
running dockerin/var/Jenkins _ home/workspace/blog-solo
[管道]{
[管道]阶段
[管道]{(GitCheckout)
[管道]结帐
未指定认证
fetchingchangesfromtremotegitrepository
检查C4 B3 Fe 99625 c 68 AE 11d 1166d 06 af 556(1。0 .0)
提交消息:"1"
首次构建。跳过changelog .
[管道]}
[管道]//阶段
[管道]阶段
[管道]{(MavenBuild)
[管道]嘘
git rev-parse-is-inside-work-tree #超时=10
git配置远程。起源。urlgit @ 192。168 .1 .44:/home/git/solo。git #超时=10
fetchingupstreamchangesfromgit @ 192。168 .1 .44:/home/git/solo。饭桶
饭桶-版本号超时=10
git获取-标签-进展git @ 192。168 .1 .44:/home/git/solo。git refs/heads/*:refs/remotes/origin/* # time out=10
gitrev-parseorigin/1.0.0^{commit}#timeout=10
gitrev-parse1.0.0^{commit}#timeout=10
gitconfigcore。sparsesecheckout #超时=10
git签出-ffca 1 bcbd 6 C4 B3 Fe 99625 c 68 AE 11d 1166d 06 af 556 #超时=10
导出Java _ HOME=/usr/local/JDK 1.8
JAVA_HOME=/usr/local/jdk1.8
/usr/local/maven 3.5/bin/mvncleanpackage-dmaven。测试。跳过=真
[信息]扫描项目.
[警告]
[警告]在buildingtheeffectivemodelfororg。B3日志:独奏:战争:2。9 .9时遇到了一些问题
[警告]'依赖项。依赖性。组织的“系统路径”。项目目录{ project }内的patch ca:patch ca:jarshouldnotpointatfiles。basedir }/src/main/resources/lib/net/索普/修补ca-0。5 .0 .jarwillbenunresolvablebydependentprojects @第245行第25列
[警告]
[警告]高度推荐解决这些问题,因为它们威胁到您的构建的稳定性。
[警告]
[警告]因此,futureMavenversionsmightnolongersupportbuildingsuchmalformedprojects .
[警告]
[信息]
[信息] - org.b3log:solo -
[信息]建筑物2.9.9
[信息]-[战争]
[信息]
[信息] - maven-clean-plugin:2.5:clean(默认-干净)@solo -
[信息]删除/var/Jenkins _ home/workspace/blog-solo/target
[信息]
【信息】-jacoco-maven-plugin:0。8 .2:准备-代理(预备代理)@solo -
[信息]argLinesetto-Java代理:/root/。m2/repository/org/jaco co/orgjaco公司代理/0。8 .2/组织。jaco公司代理-0。8 .2-运行时间。jar=dest file=/var/Jenkins _ home/workspace/blog-solo/target/jaco co . exec
[信息]
[信息] -许可证-maven-插件:3.0:格式(默认)@solo -
[信息]更新许可证页眉.
[警告]未知文件扩展名:/var/Jenkins _ home/workspace/blog-solo/src/main/resources/docker/local。属性。H3
[警告]未知的文件扩展名:/var/Jenkins _ home/workspace/blog-solo/src/main/resources/docker/local。属性。关系型数据库
[信息]Updatinglicenseheaderin:/var/Jenkins _ home/workspace/blog-solo/src/main/web app/CSS/default-admin。量滴半铸钢钢性铸铁(Cast Semi-Steel)
[信息]Updatinglicenseheaderin:/var/Jenkins _ home/workspace/blog-solo/src/main/web app/CSS/default-base。量滴半铸钢钢性铸铁(Cast Semi-Steel)
[信息]Updatinglicenseheaderin:/var/Jenkins _ home/workspace/blog-solo/src/main/web app/CSS/default-init。量滴半铸钢钢性铸铁(Cast Semi-Steel)
[信息]Updatinglicenseheaderin:/var/Jenkins _ home/workspace/blog-solo/src/main/web app/js/admin/latke admin。量滴射流研究…
[信息]Updatinglicenseheaderin:/var/Jenkins _ home/workspace/blog-solo/src/main/web app/js/common。量滴射流研究…
[信息]Updatinglicenseheaderin:/var/Jenkins _ home/workspace/blog-solo/src/main/web app/js/page。量滴射流研究…
[警告]未知的文件扩展名:/var/Jenkins _ home/workspace/blog-solo/src/test/resources/skins/Jane/CSS/_ icon。scss
[警告]未知的文件扩展名:/var/Jenkins _ home/workspace/blog-solo/src/test/resources/skins/Jane/CSS/base。scss
[警告]未知的文件扩展名:/var/Jenkins _ home/workspace/blog-solo/src/test/resources/markdown _ syntax。文本
[警告]unabletofindacommentstyledefinitionforsomefiles。youmaywanttoaddcustommapping for herelevantfileextensions .
[信息]
[信息]-maven-resources-plugin:2.6:资源(默认-资源)@solo -
[信息]使用“utf-8”编码tocopyfilteredresources .
[信息]复制9资源
[信息]
[信息] - maven-min-plugin:1.0.4:min(默认)@solo -
[信息]已合并[
src/main/web app/js/admin/admin。js,
src/main/web app/js/admin/editor。js,
src/main/web app/js/admin/editor tinymce。js,
src/main/web app/js/admin/editorkindeditor。js,
src/main/web app/js/admin/editorcodemirror。js,
src/main/web app/js/admin/table分页。js,
src/main/web app/js/admin/article。js,
src/main/web app/js/admin/comment。js,
src/main/web app/js/admin/文章列表。js,
src/main/web app/js/admin/draft list。js,
src/main/web app/js/admin/页面列表。js,
src/main/web app/js/admin/其他。js,
src/main/web app/js/admin/linklist。js,
src/main/web app/js/admin/preference。js,
src/main/web app/js/admin/plugin列表。js,
src/main/web app/js/admin/userlist。射流研究…
src/main/web app/js/admin/类别列表。js,
src/main/web app/js/admin/comment list。js,
src/main/web app/js/admin/plugin。js,
src/main/web app/js/admin/main。js,
src/main/web app/js/admin/about。射流研究…
],[21]文件
[信息]最小化[src path=src/main/web app/js/admin/latke admin。js,目标路径=src/main/web app/js/admin/latke admin。量滴js]
[信息]最小化[src path=src/main/web app/CSS/default-admin。CSS,目标路径=src/main/web app/CSS/default-admin。量滴CSS]
[信息]最小化[src path=src/main/web app/CSS/default-base。CSS,目标路径=src/main/web app/CSS/default-base。量滴CSS]
[信息]最小化[src path=src/main/web app/CSS/default-init。CSS,目标路径=src/main/web app/CSS/default-init。量滴CSS]
[信息]最小化[src path=src/main/web app/js/common。js,目标路径=src/main/web app/js/common。量滴js]
[信息]最小化[src path=src/main/web app/js/page。js,目标路径=src/main/web app/js/page。量滴js]
[信息]
[信息]-maven-编译器-插件:3.1:编译(默认-编译)@solo -
[信息]检测到更改-重新编译模块!
[信息]编译141源文件to/var/Jenkins _ home/workspace/blog-solo/target/classes
[警告]/var/Jenkins _ home/workspace/blog-solo/src/main/Java/org/B3日志/solo/util/markdowns。Java:/var/Jenkins _ home/workspace/blog-solo/src/main/Java/org/B3日志/solo/util/markdowns。javausesoroverridesadecuatedapi
[警告]/var/Jenkins _ home/workspace/blog-solo/src/main/Java/org/B3日志/solo/util/markdowns。Java:用-Xlint:deprecationfordetails重新编译.
[警告]/var/Jenkins _ home/workspace/blog-solo/src/main/Java/org/B3日志/solo/处理器/类别处理器。Java:someinputfilesuseuncheckedorunsafeonings .
[警告]/var/Jenkins _ home/workspace/blog-solo/src/main/Java/org/B3日志/solo/处理器/类别处理器。Java:用-Xlint:uncheckedfordetails重新编译.
[信息]
[信息]-maven-resources-plugin:2.6:测试资源(默认-testResources)@solo -
[信息]Notcopyingtestresources
[信息]
[信息]-maven-compiler-plugin:3.1:测试编译(默认-testCompile)@solo -
[信息]不编译测试源
[信息]
[信息]-maven-surefire-plugin:2。22 .1:测试(默认-测试)@solo -
[信息]测试已终止。
[信息]
[信息] - maven-war-plugin:3.2.2:war(默认-战争)@solo -
[信息]打包webapp
[信息]在[/var/Jenkins _ home/workspace/blog-solo/target/solo]中组装web应用程序[solo]
[信息]处理战争项目
[信息]将web app web资源[/var/Jenkins _ home/workspace/blog-solo/src/main/resources/lib/net/索普]复制到[/var/Jenkins _ home/workspace/blog-solo/target/solo]
[信息]复制web应用资源[/var/Jenkins _ home/workspace/blog-solo/src/main/web app]
[信息[1661年组装的网络应用程序毫秒]
[信息]筑战:/var/Jenkins _ home/workspace/blog-solo/target/solo。战争
[信息]
[信息]构建成功
[信息]
[信息]总时间:22.847秒
[信息]完成时间:2019-02-12T14:57:51 08:00
[信息]
[管道]}
[管道]//阶段
[管道]阶段
[管道]{(BuildandPushImage)
[管道]嘘
存储库=192 .168 .1 .44/库/solo:1.0.0
猫
码头建筑-t 192。168 .1 .44/库/solo:1.0.0 .
发送buildcontexttodockerdaemon 193.1 MB
步骤1/4:来自192 . 168 . 1 . 44/库/tomcat:最新
- 7ee26c09afb3
第2/4步:RUNrm-RF/usr/local/Tomcat/web apps/ROOT
-使用缓存
- 6fd3776d336d
第3/4步:COPYtarget/* .war/usr/local/Tomcat/web apps/root。战争
- 681b8e7f75a3
步骤4/4:CMD['catalina.sh '' run']
- Runningin022995c66416
移除中间媒体容器022995c66416
- 77f8ed952a88
成功构建77f8ed952a88
成功标记192 .168 .1 .44/库/solo:1.0.0
dockerlogin-uywb-pY4yhl9t,2000 ./192.168.1.44
警告!使用- passwordviatheCLIisinsecure .使用-密码-标准输入.
警告!yourpasswordwillbestoredunencryptin/root/.docker/config.json .
configurecredentialhelpertorovethisgwarning .看见
https://份文件。码头工人。com/engine/reference/命令行/login/#credentials-store
登录成功
docker push 192。168 .1 .44/库/solo:1.0.0
pushreferestorepository[192。168 .1 .44/图书馆/独奏]
e64f746232b6:准备
2 ff 6a 1c 612d:准备
32386b730743:准备
d27bd82364ad:准备
b17b783848f6:准备
c3041009a55f:准备
362dc50d53f9:正在准备
b20924a475a9:准备
c258ca0f6e4f:准备
0f640c03c372:正在准备
76dfa41f0a1d:准备
c240c542ed55:正在准备
badfbcebf7f8:准备
正在等待
362dc50d53f9:正在等待
b20924a475a9:等待
c258ca0f6e4f:等待
0f640c03c372:正在等待
等待中
c240c542ed55:正在等待
badfbcebf7f8:正在等待
32386b730743:已推送
2 ff 6a 1c 612d:推送
e64f746232b6:已推送
b17b783848f6:已推送
c3041009a55f:已推送
b20924a475a9:推动
c258ca0f6e4f:已推送
0f640c03c372:已推送
76dfa41f0a1d:已推送
d27bd82364ad:推送
c240c542ed55:已推送
badfbcebf7f8:已推送
362dc50d53f9:已推动
1.0.0:文摘:sha 256:F3 a 46 B4 b 409 aa 404 ee 621 dab 89152 fc 9d 8986 a9 cf 367324 c 96 cf deb 52 a0b 4669尺寸:3045
[管道]}
[管道]//阶段
[管道]阶段
[管道]{(部署Docker)
[管道]嘘
存储库=192 .168 .1 .44/库/solo:1.0.0
dockerrm-fblog-solo
真实的
错误:Nosuchcontainer:博客-个人
dockerimagerm 192。168 .1 .44/库/solo:1.0.0
真实的
dockerlogin-uywb-pY4yhl9t,2000 ./192.168.1.44
警告!使用- passwordviatheCLIisinsecure .使用-密码-标准输入.
警告!yourpasswordwillbestoredunencryptin/root/.docker/config.json .
configurecredentialhelpertorovethisgwarning .看见
https://份文件。码头工人。com/engine/reference/命令行/login/#credentials-store
登录成功
docker containerrun-d-name blog-solo-v/usr/local/JDK 1.8:/usr/local/JDK-p88:8080192。168 .1 .44/库/索罗:1。0 .0
无法在本地找到图片192。168 .1 .44/库/索罗:1。0 .0 '
1.0.0:Pullingfromlibrary/solo
ab1fc7e4bf91:已经存在
35fba333ff52:已经存在
f0cb1fa13079:已经存在
3d79c18d1bc0:已经存在
ff1d0ae4641b:已经存在
8883e662573f:已经存在
adab760d76bd:已经存在
86323b680e93:已经存在
14a2c1cdce1c:已经存在
ee59bf8c5470:已经存在
067f988306af:已经存在
9bb416c07ed0:已经存在
71085ba70bfc:拉动屠宰机
71085ba70bfc:验证检查总和
71085ba70bfc:下载完成
71085ba70bfc:拉动完成
文摘:sha 256:F3 a 46 B4 b 409 aa 404 ee 621 dab 89152 fc 9d 8986 a9 cf 367324 c 96 cf deb 52 a0b 4669
状态:downloadednewerimagefor 192。168 .1 .44/库/solo:1.0.0
9 ed 4 af 7 df 3 f 808 f 150 E0 d 5967890 a 0 acfb 98 EB 19958 B4 CEC 5499 bfc 1 E0 d 90 de 5
[管道]}
[管道]//阶段
[管道]}
[管道]//节点
[管道]内管道
完成:成功
最后到192.168.1.45的码头工人服务器中检查容器是否部署成功:
[root@dockersolo]#dockerps
containeriimagecommandcreatedstatusesportsnames
C4 278号c 192。168 .1 .44/图书馆/solo:v 2.0 '卡特琳娜。shrun ' 6分钟组5秒0.0.0.0:88-8080/tcpblog-solo
在我这个环境中,发现容器已经部署,但是容器运行有问题,使用码头日志查看相关报错如下:
2019年2月12日
07:45:45.148 WARNING [localhost-startStop-1] org.apache.catalina.startup.SetContextPropertiesRule.begin [SetContextPropertiesRule]{Context} Setting property 'antiJARLocking' to 'true' did not find a matching property. 12-Feb-2019 07:45:49.546 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. [WARN ]-[2019-02-12 07:45:49]-[org.b3log.latke.Latkes:611]: !!!!Runtime mode is [DEVELOPMENT], please make sure configured it with [PRODUCTION] in latke.properties if deployed on production environment!!!! [ERROR]-[2019-02-12 07:45:51]-[org.b3log.latke.Latkes:836]: Read skin [Jane]'s configuration failed: null [ERROR]-[2019-02-12 07:45:51]-[org.b3log.solo.SoloServletListener:302]: Can't load the default skins, please make sure skin [Jane] is under skins directory and structure correctly由于是应用方面的报错,没有深究,后面有空再看是什么原因。
至此,这个实验已经做完。
总结:
这个实验做下来,对我来说主要的难点在于不熟悉版本管理工具marven以及git等开发方面的工具,只能说对CI/CD持续集成部署做了一次简单的摸索。
使用过程中遇到任何问题,首先看报错和日志,问题最多的地方是jenkins的pipeline脚本执行,在执行过程中,需要对脚本有一个充分的消化了解,碰到问题的时候,通过查看输入日志来定位问题所在。
整个结构主要包括3个部分,镜像仓库harbor、jenkins、docker ,其中还有git仓库和git客户端,直接复用放在了harbor服务器上 。harbor是原来部署过的资源,jenkins是直接通过下载war包部署在tomcat上,docker与harbor之间的配置需要匹配,我的环境里面harbor配置的是http方式,需要在docker端配置insecure registry 。
CI/CD持续集成部署对于开发测试来说还是非常有用的,这个实验是使用docker作为容器的运行环境(slave) ,另外,还可以使用kubernetes作为容器承载环境,配置会更复杂一些,但是部署完成后的使用会更加健壮和方便。这一块后续再花时间进行实践。
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.chenqinet.cn