一、引言
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.选择安装路径
2.端口修改
安装时可在这边修改端口,默认是8080。点击Test Port按钮可以测试当前端口是否可用。
3.jdk地址配置
在这边输入jdk的目录,需要Java 11,17或21版本。
4.安装完成后可在浏览器输入http://localhost:8080/ 进行访问。
第一次会弹出下面窗口,按提示去获取密码填入,继续下一步。
接下来就是设置 Jenkins 的账号和密码,都是常规操作。最后的安装插件步骤选择安装推荐的插件即可!安装完成通过自己设置的账号密码即可登录 Jenkins。
三、修改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文件夹移动到新目录后重启服务。
2.修改JENKINS端口
打开jenkins.xml,找到httpPort=8080进行修改,重启服务。
四、配置全局属性
在 [Dashboard]> [Manage Jenkins] > [System]页面 【全局属性】下选中Environment variables,新增全局变量ANDROID_HOME和GRADLE_USER_HMOE
在 [Dashboard]> [Manage Jenkins] > [Tools]页面 【JDK安装】新增JDK;【Git installations】下Add Git。如下图
git.exe目录有在系统path环境变量添加了,这边填git即可,否则填完整路径。
五、配置项目
1.新建item
-
点击【新建item】,输入任务的名称,选中【Freestyle project】,点击确定完成创建。
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
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即可开始构建。
注意:安卓项目的local.properties一般没有提交到远程仓库,需要手动在该项目的工作空间目录下加上该文件
七、其他功能
1. 构建触发器
可以在项目配置里【构建触发器】下选中Build periodically进行周期性构建,日程表填入相应表达式即可按规定的时间触发构建。(点击旁边问号可看相应的语法规则)
构建触发器也可以设置提交代码后自动触发构建等功能,这些大家可以自行尝试下。
2. 修改build name
安装插件[Build Name and Description Setter],安装好了以后在项目配置的【构建环境】下增加了选项 Set Build Name,选中该选项,可进行填写修改构建名称。
3.增加构建步骤
在项目配置的 【Build Steps】下点击 “增加构建步骤”按钮,可以选择执行批处理或shell脚本等,增加的构建步骤可拖动位置改变执行顺序。
shell中引用全局变量 :
直接使用$标志:如$BUILD_STATUS
使用${}标志:如${BUILD_STATUS}
bat批处理中引用:
% BUILD_STATUS %
4.构建后push代码
在项目配置的 【构建后操作】下点击 “增加构建后操作步骤”按钮,选择Git Publisher,可以进行push代码、标签等操作。
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有问题的话可以到安全配置里修改试试。
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里,加到用户环境变量是不行的。