开启用户鉴权时 Jenkins 触发远程构建时的 403 问题

在开启用户鉴权后使用 GitLab 的 WebHook 来触发 Jenkins 构建时,test 请求就会提示 403 鉴权错误,网上搜索了一波资料,大多都是提示修改一些安全设置或者开启匿名用户的 job read 权限。开启 job 的 read 权限后副作用是任何人都可以查看你在 jenkins server 上的构建任务,这对于位于公网上的 jenkins 实例无疑是不安全的,最后发现最佳的实践方式是通过 Jenkins 的 token 来完成鉴权并向 trigger 的 url 发送请求。步骤如下:

Jenkins 获得本次构建的 git change log

Jenkins 每次构建都会根据 git 的提交记录生成一个 web 页面来显示自上次构建之后的提交记录列表。在配置 CI 工作流时,很多情况需要获取这个提交记录的 String 值,但是 Jenkins 并没有提供这个功能。

Jenkins 中如何让 Android SDK 根据需要自动更新

每次项目中切换了新的 support,总是要登录构建服务器更新一下 SDK,很麻烦。其实 Jenkins 本身是支持自动更新的,稍微留一下会发现,构建时不存在的 SDK 的报错信息为:

You have not accepted the license agreements of the following SDK components: …

原来是 license 问题,需要手动去 agree 才能进行下一步,所以就中断了。但其实是可以跳过的,Stackoverflow 上有人引用了 Jake Wharton 给出了方法:

1
2
3
mkdir "$ANDROID_SDK/licenses" || true
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"

上面的哈希字符串据说是 license 文本的 sha1,所以如果 license 换掉的话也会失效。暂时这样用吧。

参考:http://stackoverflow.com/questions/38096225/automatically-accept-all-sdk-licences

Android 项目的 Jenkins 参数化构建

需求描述

项目分为三种类型构建:

  1. 测试环境构建 debug
  2. 测试环境构建后上传内测平台 (fir.im)
  3. 发布版构建 release

三种构建类型在完成后都保存构建输出的 apk,只有在类型 2 完成后执行上传到内测平台操作

搭建 jenkins 构建 Android 项目

之前用过 Flow.ci、Travis 等公共的 CI 工具感觉很方便,但毕竟源码在别人那里多少有点别扭。Jenkins 是一个免费的高度可定制的 CI 开源项目,现在的公司使用它来构建 Android 项目,所以也来试一试,记录下搭建的过程以及遇到的问题,供自己和需要的人参考。