目前公司内部的通讯工具是企业微信,由于现在提测的apk都是手动打包发送到群里,为了解放双手,打算部署自动化打包工具。

我接触过的自动化打包工具主要有两种,一种是jenkins,还有一种是gitlab-runner,后者由于我在公司gitlab上没有开启gitlab-runner的权限,所以放弃了,于是乎我在公司分配给我的macbook上搭建了一套jenkins。

在mac上搭建jenkins非常方便,在这里没有采用docker的方式,而是通过homebrew来安装。

一、首先安装homebrew,安装过程中有可能会让你去下载command line tools,有的电脑安装会提示网络连接失败,那是因为苹果默认不提供自动下载的服务了,需要你去https://developer.apple.com/download/more/ 这个地址手动下载对应系统版本的command line tools,这里需要登录一下apple账户,下载安装。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

二、下载完homebrew后,安装jenkins就一行命令,非常方便

brew install jenkins

三、安装完毕,如果需要修改端口,vim是一个命令行下的编辑工具,如果不习惯用,可以直接访问该目录,通过诸如sublime这种工具修改。

vim /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist

修改httpListenAddress=0.0.0.0 意思是不管本机还是局域网中任意ip电脑都能访问

修改httpPort=8090 是访问的端口,只要不冲突,你也可以保持默认的8081不变

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>homebrew.mxcl.jenkins</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/opt/openjdk@11/bin/java</string>
		<string>-Dmail.smtp.starttls.enable=true</string>
		<string>-jar</string>
		 <string>/usr/local/opt/jenkins/libexec/jenkins.war</string>
		<string>--httpListenAddress=0.0.0.0</string>
		<string>--httpPort=8090</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

补充: .plist文件是苹果系统独有的程序执行单元的配置文件,如果你把该文件放在mac系统的/Library/LaunchAgents这个目录下,那么开机的时候就会加载运行,也就是开机启动。

四、修改完成后执行,开启jenkins,以下命令是固定写法,我猜想他的本质就是执行了mac系统的 launchctl load /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist 这个命令,去加载运行了这个配置文件,根据这个配置文件又执行了/usr/local/opt/openjdk@11/bin/java -jar /usr/local/opt/jenkins/libexec/jenkins.war -Dmail.smtp.starttls.enable=true --httpListenAddress=0.0.0.0 --httpPort=809,从而运行了jenkins的war包,jenkins的本质就是一个javaweb程序。

brew services start jenkins

五、安装完成访问127.0.0.1:8090就能进入jenkins管理界面,期间会提示输入密码,初始密码会提示你在哪个目录下,去这个目录下找到输入即可,然后推荐你安装的插件,点击安装下,最后创建一个用户即可使用,这些操作很常规,这里就不放图了。

六、因为我希望发送企业微信的时候将git的提交日志也带上,所以需要安装一个changelog插件,我已经上传到百度网盘中,在jenkins中选择系统管理-->插件管理-->高级-->上传插件-->选择文件即可安装,安装完成后重启下jenkins

链接: https://pan.baidu.com/s/1Z9rGxzy-dSPUyibpazdbuw 提取码: lfi3
--来自百度网盘超级会员v5的分享

七、在正式建立构建任务前,先做一件事,保证下载了sdk,你不需要单独去下载,只要去android studio官网https://developer.android.google.cn/studio/ 下载安装android studio,然后打开就会提示你下载sdk,在mac下android sdk路径一般为 /Users/你的用户名/Library/Android/sdk

八、去jenkins建立任务

定义一个名称,选择构建一个自由风格的软件项目,点击确定
输入你们项目的git地址
输入分支名称,勾选轮询SCM
轮询方式. 第一种配置一个token生成一个url,当访问该url时触发。第二种,第三种其他工程构建后触发、定时构建很好理解。第四种github-hook 需要github那边触发,企业默认使用gitlab较多。第五种,轮询 SCM,用的比较多,因为不知道代码什么时候提交,所以不断轮询检测是比较靠谱的方式,我一般都会使用这种方式。设置:H/2 * * * * 表示每两分钟检查下git有没有提交,有提交就触发构建
勾选add changelog 就是刚才安装好了changelog插件才能看到,这个插件的目的是为了获取到git的提交记录,entry format固定写法 %3$s
选择invoke gradle 选择你项目构建需要用到的gradle版本,如果没有,就去jenkins系统管理去下载对应的版本,tasks脚本,这里输入的脚本和在android studio中 gradlew task 一致,一行代表一个task 会顺序执行,如果需要clean就在第一行输入clean,assembleDebug表示构建debug包
脚本的意思是获取到本机ip地址,然后拼接一个可下载的路径,需要在本地上部署web服务,我使用的是nginx,也就是通过nginx访问了我的apk,$SCM_CHANGELOG 这个字段中保存了changelog插件找到的提交记录信息
ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"​`

echo $ip

echo SCM_CHANGELOG $SCM_CHANGELOG

curl '这里输入企业微信机器人webhook地址' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
          	"mentioned_list":["wangqing","@all"],
            "content": "自动化打包完成\n下载地址:http://'${ip}':8080/jenkins-build-out/toc_out/\n 本次更新:'${SCM_CHANGELOG}'",

        }
   }'

最后执行的shell脚本的意思是将构建好的apk文件复制到可供下载的文件路径下,需要根据自己的实际情况修改

rm -rf /Users/用户名/Public/jenkins-build-out/toc_out/*.apk
cp /Users/用户名/.jenkins/workspace/构建名称/app/build/outputs/apk/*/*/*.apk /Users/用户名/Public/jenkins-build-out/toc_out/
chmod 777 /Users/用户名/Public/jenkins-build-out/toc_out/

如果你也使用nginx提供访问apk下载的服务,可以在nginx.conf文件夹中这样配置,在mac中安装nginx和jenkins一致,brew install nginx即可,然后去/usr/local/etc/nginx 这个目录修改配置文件,然后brew services start nginx 开启即可

        location / {
  	 root /Users/用户名/Public;
         autoindex on;
         autoindex_exact_size off;
         autoindex_localtime on;
         charset utf-8,gbk;
        }

完成后打包就可以自动发送企业微信群里了,测试根据你提供的web地址下载对应的安装包,从此,告别了手动发包的操作。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注