ad

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_3.3 使用Jenkins 编译项目

网友投稿 150 2023-11-07

【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第3章,第3节,由陈刚、王洪军编著。

3.3 使用Jenkins 编译项目

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_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小时内删除侵权内容。

上一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_9.1 生成器 装饰器和闭包
下一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_6.4 变量的作用域
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×