Jenkins 持续集成之使用批处理替换文件中的目标字符串

Jenkins 持续集成之使用批处理替换文件中的目标字符串

一、背景

在 Android 项目开发中使用 Jenkins 持续集成,将可以解耦的 module 作为一个独立项目,然后在 Jenkins 上自动打包,推送到 maven 私服,最后主工程通过 gradle 将 aar 包添加到项目中。一般情况下,当 module 的版本发生改变时,只需要修改build.gradle 中的 versionName,然后打一个新的版本推送到 maven 私服即可。而实际中,由于项目需要,这个版本号却需要从另外一个项目中获取。这样问题就来了,我们需要从另外一个项目的源文件中读取版本号,然后写入 module 的 build.gradle 文件,再提交修改到 git 仓库,通过 webhook 触发 module 的 Jenkins 构建推送到 maven。

假设主工程为 A,解耦的 module 新建为依赖项目 B,而我们需要的第三个项目 C,Jenkins 集成流程如下:

  1. git 拉取 C 项目,执行构建任务,并且把构建结果复制到 B 的约定目录(项目需要);
  2. 约定 C 项目的源文件中有一个文件 x.txt,这个文件中有我们需要的 B 的版本号
  3. 通过批处理脚本,从 x.txt 中读取到版本号:versionName
  4. 将 versionName 替换 B 项目中 build.gradle 中的 versionName
  5. cd 到 B 项目的根目录,执行 git add .,git commit -m “msg”,git push,将构建结果和build.gradle提交到仓库。
  6. 提交操作触发 B 项目的 Jenkins 构建,构建成功后将新版本上传到 maven仓库。

而我遇到的问题就是:

  1. 读取 C 项目源文件中 x.txt 中的版本号(x.txt 的内容可能是一个json字符串:{“versionName”:“1.0.0”}),那么我们需要用 bat 脚本读取到 “1.0.0”
  2. 将从 C 项目源文件中读取到的 versionName 替换 B 项目build.gradle中的 versionName

本文主要是记录一下如何使用批处理,解决以上两个问题。

二、提取x.txt文件中的versionName

这里主要的问题是如何解析这个json字符串,解决问题的思路是将将 json 字符串替换成 name=value 的格式,然后设置为变量,最后就可以通过name 来读取其值value。但是有一个缺点,如果中间json格式不是这种非标准格式,则会出错,bat脚本如下:

rem # 读取文件,在Jenkins构建中,我们是知道C项目的源码目录的所以文件的路径是已知的
@echo off
set versionFile=C:\Users\lenovo\Desktop\transport\bat\version.txt
echo %versionFile%
rem # 读取文件的第一行,并赋值给:a
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值