配置项目构建完成后文件移动—- Jenkins自动化部署学习笔记(三)

前言

  在前两篇文章中,跟大家分享了在 Windows 系统上安装 Jenkins 和使用 Jenkins 进行 Android 项目的编译打包;相信可能会有人疑问,打包完成之后,我需要将 apk 文件放入指定位置怎么办。

  其实,Jenkins 功能很强大,它可以配置在打包完成之后将你所需的文件拷贝至目标路径,亦可配置在打包完成后(成功/失败),邮件通知相关人员。下面详细介绍:

一、将打好的包移动至指定目录

  1. 我在自己的电脑上安装 Jenkins ,进行项目构建,并且想要将每次构建的包存入到E盘的AndroidApk目录下:
    在上篇文章中,我们说到了,在配置构建任务时,有一个构建的选项,我们可以增加相应的操作来实现;
    • (1)、在构建选项区域下方,点击 增加构建步骤 ,选择Execete Windows batch commond
      添加一个构建任务(务必在Invoke Gradle script 任务下方)
      image.png
  • (2)、在增加的 Windows 命令框中,需要配置相应的操作命令来实现移动的功能

其实移动的功能,我们可以看作是将源文件复制到目标目录,然后将源文件删除。
在打包时我们可以根据不同的环境配置不同的包,比如debug.apk ,release.apk;
我们也可以使用命令,将不同环境的包,移动至不同的目录下:

复制文件,我们需要源文件目录和目标文件目录:
此项目中:
源文件目录:D:\jenkinsSpace\example\app\build\outputs\apk\
目标文件目录:E:\AndroidApk
在AndroidApk下,我们再创建不同的文件夹,如:devApk 和 releaseApk
故,命令如下:

移动文件命令

copy D:\jenkinsSpace\example\app\build\outputs\apk\*debug*.apk E:\AndroidApk\devApk
copy D:\jenkinsSpace\example\app\build\outputs\apk\*release*.apk E:\AndroidApk\releaseApk
rmdir /s /q D:\jenkinsSpace\example\

可以看到,这个总共有三条命令

第一条命令:是将源文件目录下的名称包含 debug ,后缀名为 .apk 的文件复制到 E:\AndroidApk\devApk 目录下

第二条命令:是将源文件目录下的名称包含 release ,后缀名为 .apk 的文件复制到 E:\AndroidApk\releaseApk 目录下

第三条命令:是将 Jenkins 构建该项目的工作空间进行清空(删除工作空间目录及子文件)

  • (3)、配置好之后,我们点击保存, 进行立即构建,构建结果如下:

构建结果

我们可以看到,在位置 1 处:项目构建成功,耗时 1分56秒

位置 2 处 :执行了复制名称包含 debug ,后缀名为 .apk 的文件的命令,成功

位置 3 处 :执行了复制名称包含 release ,后缀名为 .apk 的文件的命令,失败

位置 4 处:执行了删除工作空间的命令,成功

位置 5 处:退出执行命令,exit

位置 3 出执行失败的原因是,我们再配置项目构建任务的时候,只是写了 clean assembleDebug 这两个命令,进行项目clean 和debug构建,我们将这个命令更改为clean build,就会构建所有配置的渠道包。

  1. 我们有时候需要将打好的apk 移动至共享文件夹,方便大家使用获取安装,这时候,我们只需要在执行复制命令前增加一行命令,将共享文件夹目录映射到本地盘符:

命令如下:
net use [盘符] \[ip][共享文件夹] “[password]” /user:”[userName]”

% 将共享文件夹映射为盘符 Y:%
net use Y: \\192.168.22.156\tech  "!qaz2wsx3edc" /user:"tech"

在此命令下,我们更改上面的命令中的盘符为共享文件夹盘符,就可将apk移动至共享文件夹了

copy D:\jenkinsSpace\example\app\build\outputs\apk\*debug*.apk Y:\AndroidApk\devApk
copy D:\jenkinsSpace\example\app\build\outputs\apk\*release*.apk Y:\AndroidApk\releaseApk
rmdir /s /q D:\jenkinsSpace\example\
  1. 我们也可以定义一个bat文件,放在主机上,让Jenkins任务去调用执行这个bat文件,来复制/移动文件
    bat文件内容如下:
    % 将共享文件夹映射为盘符 Y:%
    net use Y: \\192.168.22.156\tech  "!qaz2wsx3edc" /user:"tech"
    

% 配置工作空间目录变量%
set “spaceDir=D:\jenkinsSpace\example”

% 配置目标文件夹目录变量%
set “targetDir=Y:\AndroidApk\jekinsBuildApks”

% 定义当前日期字符串的变量如 20180505%
set “dateStr=%date:0,4%%date:5,2%%date:~8,2%”

% 定义Apk源文件目录%
set “resourceDir=%spaceDir%\app\build\outputs\apk”

% 根据日期分别定义在dev,test , release 下需要创建的文件夹目录%
set “devPath=%targetDir%\dev%dateStr%”
set “testPath=%targetDir%\test%dateStr%”
set “releasePath=%targetDir%\release%dateStr%”

% 创建文件夹%
md %devPath%
md %testPath%
md %releasePath%

% 复制apk到目标文件夹%
copy %resourceDir%*dev.apk %devPath%
copy %resourceDir%*test
.apk %testPath%
copy %resourceDir%*release*.apk %releasePath%

% 强制删除工作空间目录%
rd/s/q %spaceDir%\

该文件中 **%%** 之间的内容为**注释内容**
然后我们将该bat文件命名为copyApp.bat ,放置在D:\bat\目录下,
我们再Jenkins 任务中做如下配置

call D:\bat\copyApp.bat
exit 0
```
执行bat文件

call D:\bat\copyApp.bat 是调用执行bat文件,
exit 0 是用来处理上面出现的因windows 命令执行错误导致Build FAILURE,
Jenkins 任务根据cmd命令行返回是否为0来判断是否Build 成功,故只要exit 0,每次返回0,无论windows 命令执行成功与否,只要项目Build 成功了,整个任务就是成功的。
至此项目移动至其他目录完成!

上一篇:自动化构建Android项目 —- Jenkins自动化部署学习笔记(二)