在Windows搭建Jenkins构建Android项目

一、引言

Jenkins 是一个用于自动化构建、测试和部署软件项目的开源持续集成和持续交付(CI/CD)工具。它可以帮助开发团队更快地构建、测试和交付他们的应用程序。

Jenkins 可以自动化执行打包操作,使开发团队能够在代码更改后立即构建软件,并生成可部署的软件包。Jenkins 的构建任务可以配置为在特定触发条件下运行,例如代码提交到版本控制仓库或定期计划。

Jenkins提供了一个可扩展的平台, 提供了大量的插件,可以扩展其功能,以满足各种项目的需求。你可以使用插件来集成不同的构建工具、部署到不同的目标平台,或执行各种自定义任务。

Jenkins 通常与持续集成和持续交付(CI/CD)工作流程一起使用。它可以作为 CI/CD 管道的一部分,在软件开发周期中自动化构建和部署代码。

总之,Jenkins 的打包功能是其持续集成和持续交付工作流程的关键组成部分之一,它可以帮助开发团队更轻松地构建、测试和交付高质量的软件。通过配置适当的构建任务,你可以根据项目的需求自定义打包过程。

二、安装

Jenkins安装包可以到官网下载(https://www.jenkins.io/download/),有 war 包和msi包,这边建议下载 msi 安装包,这样的话不需要本地配置 Tomcat,直接将 Jenkins 当作 Windows 的服务启动,每次开启会自动运行。

Jenkins目前需要JDK 11以上版本,请先确认jdk版本是否符合要求。

msi包双击开始进行安装。按照提示一步一步操作即可安装完成。

1.选择安装路径
image.png
2.端口修改

安装时可在这边修改端口,默认是8080。点击Test Port按钮可以测试当前端口是否可用。


image.png
3.jdk地址配置

在这边输入jdk的目录,需要Java 11,17或21版本。


image.png
4.安装完成后可在浏览器输入http://localhost:8080/ 进行访问。

第一次会弹出下面窗口,按提示去获取密码填入,继续下一步。


image.png

接下来就是设置 Jenkins 的账号和密码,都是常规操作。最后的安装插件步骤选择安装推荐的插件即可!安装完成通过自己设置的账号密码即可登录 Jenkins。


image.png

三、修改JENKINS_HOME和端口

1.修改JENKINS_HOME

jenkins默认的主目录是C:\ProgramData\Jenkins\.jenkins,后续创建项目后工作空间会建在该目录下,避免c盘存储空间占用过多,可以修改主目录地址。
在jenkins安装路径(上面安装步骤有设置安装路径)里找到jenkins.xml,打开,修改<env name="JENKINS_HOME" value="%ProgramData%\Jenkins\.jenkins"/>里的value值,关闭jenkins服务避免文件占用,将原目录的.jenkins文件夹移动到新目录后重启服务。

image.png
2.修改JENKINS端口

打开jenkins.xml,找到httpPort=8080进行修改,重启服务。


image.png

四、配置全局属性

在 [Dashboard]> [Manage Jenkins] > [System]页面 【全局属性】下选中Environment variables,新增全局变量ANDROID_HOME和GRADLE_USER_HMOE


image.png

在 [Dashboard]> [Manage Jenkins] > [Tools]页面 【JDK安装】新增JDK;【Git installations】下Add Git。如下图


image.png
image.png

git.exe目录有在系统path环境变量添加了,这边填git即可,否则填完整路径。

五、配置项目

1.新建item
  • 点击【新建item】,输入任务的名称,选中【Freestyle project】,点击确定完成创建。


    image.png
image.png
2.配置参数(参数化构建)
  • 如果构建时需要传参,选中【This project is parameterized】后添加参数。


    image.png

    下面截图里增加了个参数 BUILD_TYPE,是个选择类型参数,增加了Release和Debug两个选项。添加其他类型的参数大家可以自己试试。


    image.png
  • 如果需要增加个分支参数,可以选择项目的分支,需要安装插件Git Parameter,
    在 [Dashboard]> [Manage Jenkins] > [Plugins]页面 搜索插件名称,选中并点击安装。


    image.png

    安装完成后回到项目配置页,添加参数,选中“Git参数”,填写名称、描述和默认值,选择参数类型,这边选择“分支”,按需求也可以选标签等其他选项。点击高级 按钮可去配置排序方式和已选值等。


    image.png
image.png
3.源码管理- 添加git仓库
  • 在【源码管理】下选中 Git,在Repository URL 填入仓库地址,在Credentials下添加凭据,如果仓库是使用SSH的话添加ssh私钥,如果是http的话添加用户名密码。


    image.png

    我这边采用ssh方式,添加方式如下面截图。


    image.png

    凭据添加完成后,Credentials选中刚刚添加的凭据,没有红色报错说明我们配置正确。
    image.png
  • 分支配置,在Branches to build 指定分支使用 ${BRANCH},代表使用上面我们配置的BRANCH参数的值作为我们的构建分支。


    image.png

    注意:Jenkins clone代码默认超时时间是10分钟,可以在Additional Behaviours下新增Advanced clone behaviours修改拉取代码的超时时间,避免代码拉取失败。也可以在这边勾选浅克隆 配置浅克隆深度加快拉取代码速度。


    image.png

    image.png
4. 构建步骤
  • 在【Build Steps】增加构建步骤 Invoke Gradle script


    image.png

    选中Use Gradle Wrapper,Tasks填写 clean assemble${BUILD_TYPE} --stacktrace ,BUILD_TYPE就是我们上面配置的参数,构建时会用我们选择的值去替换。


    image.png

    如果想用配置的参数值替换项目里gradle.properties里的同名key值,可以在高级下勾选“Pass all job parameters as Project properties”。
    image.png
5. 构建后操作
  • 在【构建后操作】增加构建后操作步骤Archive the artifacts,可以存档构建产物,这边存档生成的apk,具体存档什么文件可以自己按需要填写,逗号隔开。


    image.png

    image.png

六、开始构建

点击Build with Parameters,选择填入相应参数,点击Build即可开始构建。

image.png

注意:安卓项目的local.properties一般没有提交到远程仓库,需要手动在该项目的工作空间目录下加上该文件

七、其他功能

1. 构建触发器

可以在项目配置里【构建触发器】下选中Build periodically进行周期性构建,日程表填入相应表达式即可按规定的时间触发构建。(点击旁边问号可看相应的语法规则)


image.png

构建触发器也可以设置提交代码后自动触发构建等功能,这些大家可以自行尝试下。

2. 修改build name

安装插件[Build Name and Description Setter],安装好了以后在项目配置的【构建环境】下增加了选项 Set Build Name,选中该选项,可进行填写修改构建名称。


image.png
3.增加构建步骤

在项目配置的 【Build Steps】下点击 “增加构建步骤”按钮,可以选择执行批处理或shell脚本等,增加的构建步骤可拖动位置改变执行顺序。


image.png

shell中引用全局变量 :
直接使用$标志:如$BUILD_STATUS
使用${}标志:如${BUILD_STATUS}
bat批处理中引用:
% BUILD_STATUS %

4.构建后push代码

在项目配置的 【构建后操作】下点击 “增加构建后操作步骤”按钮,选择Git Publisher,可以进行push代码、标签等操作。


image.png
5.Jenkins 重新设置构建号

在 Manage Jenkins ----Script Console 中执行如下脚本:

item = Jenkins.instance.getItemByFullName("job_name")
item.builds.each(){build->build.delete()}
Jenkins.instance.getItemByFullName("job_name").updateNextBuildNumber(想设置的起始号 如 1)

八、相关问题

1. 分支名中文乱码,或控制台输出日志里的中文乱码

在jenkins安装目录下的jenkins.xml,增加一行:

<env name="JAVA_TOOL_OPTIONS" value="-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"/>
2. Git Host Key Verification有问题的话可以到安全配置里修改试试。
image.png
3. bat批处理日志乱码

通过chcp 65001将控制台编码设置为UTF-8。

@echo on

chcp 65001
xcopy /E /C /I /Y /S test/* \\10.xx.0.xx\软件\Product\test\
4. 执行shell脚本日志乱码

脚本开头加 export LANG="en_US.UTF-8"

export LANG="en_US.UTF-8"
if $isMonkey
then
for file in hmi_module_main/build/outputs/apk/**/*.apk
do 
adb install $file
done
adb shell am start-foreground-service -a com.autonavi.amapauto.autohelper.service.monkey -e act start -e app com.autonavi.amapauto -e runTime 120  -e netMock true -e screenshotNum 100
else
echo "skip Monkey test..."
fi
5.shell脚本git push 提示Permission denied (publickey).

ssh私钥文件路径设置给GIT_SSH_COMMAND变量

export GIT_SSH_COMMAND="ssh -i C:/Users/lll/.ssh/id_rsa"
git push origin HEAD:XXX
6.bat脚本或shell脚本里面用到的命令(比如git、adb等)找不到或执行不了

要确保命令所在路径有加到系统的环境变量path里,加到用户环境变量是不行的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容