Jenkins 踩坑记录

Jenkins
Jenkins的安装步骤我就不赘述了,有很多文章可以供参考,本文只讲在安装使用过程中遇到的一些问题及解决的方法。

任务面板

1. 安装

博主用于部署 Jenkins 的设备是一台 Debian8 主机,使用 ssh 连接。一开始我按照官方指南来进行安装,但是在执行 sudo apt-get install jenkins 提示找不到这个安装包,后来发现是软件源的问题,官方指南上使用的是 https ,改成 deb http://pkg.jenkins.io/debian-stable binary/ 就可以了。
我曾尝试使用 deb 安装包进行安装,但是安装完毕之后无法启动服务,不知道什么原因,要是哪位大佬知道还请不吝指教。

2. 使用QQ邮箱作为通知邮箱

如果你使用自己的QQ邮箱作为通知发件邮箱,首先你需要在你的 QQ 邮箱中,开启 SMTP 服务,如果你已经开启过,请点击下方的生成授权码。
开启 QQ 邮箱 SMTP 服务

在 Jenkins 的邮箱通知中密码位置填写的是 QQ 邮箱的授权码!
密码填写授权码

3. Gradle 错误

1
2
3
Build step 'Invoke Gradle script' changed build result to FAILURE
Build step 'Invoke Gradle script' marked build as failure
Finished: FAILURE

控制台输出这样的错误信息,说明 Gradle 在编译打包的过程中出现错误,我们可以按照以下方法来进行排查:

3.1 Jenkins 配置错误

首先我们需要检查 Gradle 配置是否存在问题,网上很多帖子上建议我们在任务配置中使用 Invoke Gradle,如果使用这个选项的话一定要正确的配置 Gradle ,确保两点:

  1. Gradle 路径正确
  2. Gradle 版本正确
    正确的Gradle路径

项目的 Gradle 版本信息保存在 ./gradle/wrapper/gradle-wrapper.properties 这个文件中
项目的 Gradle 版本

如果你使用的是一台全新的机器部署的 Jenkins ,在确保网络连接 OK 的情况下完全可以在全局工具配置中使用 自动安装 或者在任务配置中使用 Use Gradle Wrapper

3.2 项目配置出错

在检查确认我们的 Gradle 配置没有问题后,我们继续查看控制台的输出,在浏览器中搜索 [ERROR]Exception 可以帮助我们快速定位问题。

问题一:无法下载指定版本的 kotlin


1
2
3
4
5
A problem occurred configuring root project 'xxxx'.
> Could not resolve all files for configuration ':classpath'.
> Could not download kotlin-compiler-runner.jar (org.jetbrains.kotlin:kotlin-compiler-runner:1.2.41)
> Could not get resource 'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.2.41/kotlin-compiler-runner-1.2.41.jar'.
> Connection reset

解决方法:修改 kotlin 版本

问题二:依赖版本错误、配置代理


1
2
3
4
5
6
7
8
> Could not resolve all dependencies for configuration ':app:_uerbPPortraitApkCopy'.
> Could not resolve com.android.support.constraint:constraint-layout:1.1.0.
Required by:
project :app
> Could not resolve com.android.support.constraint:constraint-layout:1.1.0.
> Could not get resource 'http://www.idescout.com/maven/repo/com/android/support/constraint/constraint-layout/1.1.0/constraint-layout-1.1.0.pom'.
> Could not GET 'http://www.idescout.com/maven/repo/com/android/support/constraint/constraint-layout/1.1.0/constraint-layout-1.1.0.pom'.
> Connect to 127.0.0.1:1080 [/127.0.0.1] failed: 拒绝连接 (Connection refused)

依赖了一个不存在的 constraint-layout 版本,修改成正确的版本即可。

由于我用于开发的电脑上配置了 SS 代理,所以在项目目录下的 gradle.properties 文件中配置使用代理:

1
2
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080

但是在 Jenkins 服务器上并没有 SS 代理,所以会出现这个错误,只需要将代理注释即可。

Tips:其实,如果你用于部署 Jenkins 的主机上安装了 AS,那么你只要能在AS里顺利打包,在 Jenkins 上也能顺利打包,而且 AS 也相对更容易定位错误发生的位置与原因。如果没有安装 AS,就要要善用 Ctrl + F 搜索,来快速定位问题。

4. fir.im 插件上传路径配置出错

1
2
3
4
ERROR: Could not find the file specified by the pattern **/*.apk,**/*.ipa
Build step 'Upload to fir.im' marked build as failure
Sending e-mails to: xxxxxxx@qq.com
Finished: FAILURE

如果你不知道你的项目在计算机中的绝对路径,那么请使用 ${WORKSPACE} 来指向你的工作区:
工作区