Excel不相邻列如何打印在一起-英雄云拓展知识分享
150
2023-11-07
【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第3章,第3节,由陈刚、王洪军编著。
3.3 使用Jenkins 编译项目
在完成 GitLab 代码的提交之后,接下来,在Jenkins 中进行 CI 集成操作。Jen- kins 的安装和操作教程,在附录4中已有说明,不再重述。这里有一个细节值得注 意:因为 Docker 版的Jenkins 本身没有集成 Maven 软件,所以在制作一些 Java 项目 时 ,Maven 命令就会出错。这里是先在宿主机上安装好 Maven 程序,再将宿主机的 Maven 挂进 Docker 容器(-v/usr/local//maven:/usr/local/maven) 。Docker 命令如下:
在正式使用时,须有更有效率的方式达成。操作步骤如下:
① 用管理员身份登录,建立流水线型的任务,名为 ZEP-BACKEND-JAVA, 如 图3- 25所示。
② 后期要使用 Manabe 通过Jenkins API 传过来的参数进行构建,使用的参数
如表3- 1所列。在上面的参数设计中,我们争取让其适用于不同语言的项目,如果这个目标达不 成,至少要让其适用于相同语言的项目,也至少需要对同一个语言,生成同一种软件 包(war 包或jar 包)的项目适用。绝对不可取的是,对公司每一个项目,都建立一个 Pipeline 流水线任务,这样的任务,对现实没有一定的抽象度,标准化程序不高, 一有 变动,就会涉及巨大的工作量。我们宁愿多设计一个不用的参数,也不要在需要灵活 性时,发现没有参数可用。
https://github.com/aguncn/manabe/blob/master/manabe/config/jenkins_demo_pipeline
代码解释:
第 3 行 :label"master": 表示使用主节点编译。
第9行:${WORKSPACE}: 这种不是我们明显传入的变量,就是系统内置的一
些变量。
第12行:${git_url}: 这种类似 Shell 的变量插值,正是我们传递给 Jenkins 的变量。
第23行:因为我们的软件包包含配置文件,所以用tar 将软件和配置压缩起来。
第18行:dir("${WORKSPACE}/${dir_build_file}") 这样的语法,表示的是 cd 到某个目录。延伸说明:
上述由于还没有讲到 Nginx 服务器,所以没有将软件包做进一步的传送,只是 简单进行了 echo 输出。等讲完 Nginx 的设置之后,再回来完善这一脚本。
在生产级的应用中,通常还会包括一些自动化测试、代码覆盖等,在此完成。
④ 接着,进行一次模拟手工,单击左边栏的 Build with Parameters 进行编译,如 图3- 27所示。
⑤ 如果是第一次编译,maven 会从远程拉取 jar 包,这一过程很费时间,所以需 要长时间地等候,第一次拉取得到 jar 包都会缓存在 maven 在本地的一个临时目录 仓库中,下一次如果版本没有更新,就不会再次进行远程拉取了。所以一旦经过第一 次编译,以后就很快了。如果我们看看 Jenkins 的 console 输出,就会看到,Jenkins 是严格按我们的 Pipeline 脚本在进行自动化操作。由于输出太长,这里只截留一些 关键输出:
Started by user root
Running in Durability level:MAX_SURVIVABILITY
[Pipeline]node
Running on Jenkins in/var/jenkins_home/workspace/ZEP-BACKEND-JAVA
[Pipeline]{
[Pipeline]stage
[Pipeline]{(Prepare Git Code)
[Pipeline]echo
hahaha
[Pipeline]sh
[ZEP-BACKEND-JAVA]Running shell script
+rm-rf /var/jenkins_home/workspace/ZEP-BACKEND-JAVA/Readme /var/jenkins_home/ workspace/ZEP-BACKEND-JAVA/javademo /var/jenkins_home/workspace/ZEP-BACKEND-JAVA/ja-
vademo@tmp
[Pipeline]git
>git rev-parse --is-inside-work-tree #timeout =10
Fetching changes from the remote Git repository
>git config remote.origin.url http:// 192.168.1.112/ZEP-BACKEND/ZEP-BACKEND-JA- VA.git #timeout =10
Fetching upstream changes from http:// 192.168.1.112/ZEP-BACKEND/ZEP-BACKEND-JA-
VA.git
>git --version #timeout=10
Downloaded from central:https://repo.maven.apache.org/maven2/com/google/guava/gua- va/18.0/guava-18.0.jar(2.3 MB at 282 kB/s)
[INFO]---
[INFO]BUILD SUCCESS
[INFO]---
[INFO]Total time:03:19 min
[INFO]Finished at:2018-09-17T15:21:28Z
[INFO]--
[Pipeline]}
[Pipeline]//dir
[Pipeline]}
[Pipeline]//stage
[Pipeline]stage
[Pipeline]{(scp package to nginx)
[Pipeline]echo
DockerPush..
[Pipeline]echo
DockerPush end..
[Pipeline]}
[Pipeline]//stage
[Pipeline]}
[Pipeline]//node
[Pipeline]End of Pipeline
Finished:SUCCESS
⑥ 当编译完成之后,软件包就生成了。同时在 Jenkins 的前端也提供了图表,用 于显示编译的进度和时间。在图3-28中,Prepare Git Code 平均花费5 s,Build 平 均花费37 s,sep package to nginx平均花费133 ms 。这三个阶段,就是我们在 Pipe-
line 脚本中定义的三个阶段,并且随着编译次数越来越多,平均值就会越来越准确。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~