Mac - Jenkins - Android 持续集成打包
Mac - Jenkins - Android 持续集成打包
安装 Jenkins
$ brew install jenkins
启动 Jenkins
命令行启动:
$ jenkins
输入密码:密码的路径就在这个标红的路径下可以找到
浏览器打开 Jenkins:
浏览器地址栏输入 http://localhost:8080
输入密码:
密码的路径就在标红的路径下可以找到
插件安装:
建议采用推荐安装的方式
安装 Android Lint 插件
系统管理 -> 管理插件 -> 搜索
Android Lint
安装
配置 Jenkins
Android环境配置:
系统管理 -> 系统设置 -> 全局属性 -> 环境变量 -> 键值对列表
键值必须是ANDROID_HOME
- ANDROID_HOME
- /Users/zan/Library/Android/sdk
Gradle环境配置:
command execution failed java.io.IOException: Cannot run program "gradle" (in directory ".jenkins/workspace"): error=2, No such file or directory
不配置的话会出现上述错误
找到Gradle路径
Gradle 在Android Studio 包下
- (应用程序 -> 找到Android Studio ->右击 -> 显示包内容 -> Contents -> gradle -> gradle-4.4 -> bin )
/Applications/Android\ Studio.app/Contents/gradle/gradle-4.4/bin
配置Gradle全局变量(若已配置过则省略)
打开.bash_profile
$ open -e .bash_profile
配置全局变量到 bash_profile, 并保存
1
2
3
4> GRADLE_HOME=/Applications/Android\ Studio.app/Contents/gradle/gradle-4.4;(Gradle的本机路径)
> export GRADLE_HOME
> export PATH=$PATH:$GRADLE_HOME/bin
>source命令使配置生效
$ source .bash_profile
(source + 文件名)
测试gradle配置是否成功
gradle -version
若出现
bash: /Applications/Android Studio.app/Contents/gradle/gradle-4.1/bin/gradle: Permission denied
错误解决方法
$ cd /Applications/Android\ Studio.app/Contents/gradle/gradle-4.4/bin
$ chmod +x gradle
继续测试, 这时候就该成功了
Jenkins 上配置 gradle
找到 gradle 配置
系统管理 -> 全局工具配置 -> Gradle -> Gradle 安装 -> 新增Gradle
配置名称以及GRADLE_HOME
name : gradle-4.4 (随便起名字)
GRADLE_HOME: /Applications/Android Studio.app/Contents/gradle/gradle-4.4 (Gradle路径)
取消自动安装的勾选
保存配置
创建新的Android项目
新建任务
- 填入名称(随便)
- 构建自由软件风格
- 确定
任务详情配置
源码管理 -> Git
Repository URL : git@github.com:H-Zan/BranchTest.git
Credentials (ssh 配置)
Add -> jenkins
Domain : 全局凭据
类型 : SSH Username with private key (注意是private key)
范围 : 全局即可
Username : Zan (随便填)
Private Key : Enter directly
把 .ssh 下 id_rsa.gitLab 里的 private key 粘贴到 Enter directly 中
也就是 id_rsa.gitLab 里的 private key (所有文字), 而不是 id_rsa.gitLab.pub 里的 public key
Passphrase : 如果配置ssh的时候没有做其他处理的话, 不用写
描述 : gitlab随便填写(用于区分)
添加
勾选刚刚添加好的 Zan(gitlab)
保存任务
立即构建任务
(必须要先构建一次: 此时会拉取代码)
但不会产生apk
添加gradle构建
构建 -> 增加构建步骤 -> 选择 Invoke Gradle script
勾选 Invoke Gradle
Gradle Version :
gradle-4.4
(选择上步骤自己配置的gradle)不勾选Use Gradle Wrapper
BUT
Tasks :
build
高级
Build File :
${workspace}/build.gradle
填写的是这个项目下的build.gradle路径
再次构建
此时便可以产生apk
将构建好的apk上传到蒲公英
apk路径
/Users/zan/.jenkins/workspace/Anyo/app/build/outputs/apk/release/app-release.apk
添加上传到蒲公英的脚本
找到自己的项目 -> 配置 -> 构建 -> 增加构建步骤 -> 执行shell -> 把命令填入
curl -F "file=@apk路径" -F "uKey=蒲公英的userkey" -F "_api_key=蒲公英的apikey" http://www.pgyer.com/apiv1/app/upload
上传完成后发送邮件通知
issue
git 超时 (Timeout after 10 minutes)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16ERROR: Timeout after 10 minutes
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@172.16.100.2:anyodev/android-client-new.git
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:888)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1155)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1186)
at hudson.scm.SCM.checkout(SCM.java:504)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1208)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)
at hudson.model.Run.execute(Run.java:1815)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
Caused by: hudson.plugins.git.GitException: Command "git fetch --tags --progress git@172.16.100.2:anyodev/android-client-new.git +refs/heads/*:refs/remotes/origin/*" returned status code 143:Solution steps:
- For resolve the problem we have to edit in Jenkins project configuration and find the “git”.
- Then click on “Add” button and select “Advanced clone behaviours”.
- Then in Timeout (in minutes) for clone and fetch operations box put any number which is more then 10, (I put 60 here).
- Apply and the save the configuration.
- Build Now again , It took some more time to build , but it will fixed this error.
解决步骤:
- 找到项目
- 配置
- 源码管理 -> Git
- Additional Behaviours -> Advanced clone behaviours
- Timeout (in minutes) for clone and fetch operations : 100 (自己填超时的分钟数)
- Shallow clone 可以勾选, 用来降低拉取时间