一、扯闲篇
打包对于每个客户端开发来说是家常便饭,在整个开发流程中,我们可能会打很多次的包,本地build运行验证,打包给测试,啥?有bug?,继续。。。。我们本地调试的时候可以直接运行,但是给测试提供测试包或者产品提供验收包的时候,一般是给链接让他们自行下载,或者让他们自行点击构建,此时就需要一个构建打包的平台了,所以需求就又来了。。。
从头到尾开发一个类似平台需要不少的资源,一般情况下,没有沙雕会这么做,除非是大厂,有很多构建的需求,内部会有类似的平台,目前公司用的其他的平台,总感觉不好用,所以决定使用开源的Jenkins来搭建自己的打包平台(都是因为闲的?)
因为是是在本地搭建的,所以我下面以Mac os作为例子
二、搭建流程
1、安装
一言不合就直接上链接了,www.jenkins.io/download/we… ,官网直接下载
a、 因为是mac环境,直接一个命令就好 brew install jenkins ,
b、 当然,如果原来没有装过brew,是会收获 brew command not found 一枚,不要方,百度一下你就知道,再来一个命令 /usr/bin/ruby -e “$(curl -fsSL raw.githubusercontent.com/Homebrew/in…“)即可。之后就按照提示选择,然后就是等待。。。自动安装一堆东西后,就提示成功了。
c、 最后记得brew doctor 一下,会有些warning,按照提示执行对应指令就好,试了下,感觉中科大的源比较快,建议使用这个。
d、 等全部安装完再执行 brew services start jenkins 其实我最终启动的时候是直接运行 /opt/homebrew/bin/jenkins 文件的。
好了,以上就是安装了。
2、配置
1、启动
上面安装完以后,就直接在浏览器输入 http://localhost:8080 就会打开jenkins了,首次打开不要着急,等下会出现一个输入密码的页面,密码在启动的的终端窗口里,或者 /Users/xxx/.jenkins/secrets/initialAdminPassword 下面,复制粘贴就好。
紧接着会让你安转相应插件,左边是默认的,右边是自定义,一般我们选左边的默认的,点击后,又是等待。等待之后会提示创建一个账号。
2、新建节点
等全部安装完以后,会进入jenkins的页面,还没完,刚进来会提示让你创建新节点,一般不使用默认节点,创建节点主要就是填写名称,和你的工作路径
随便填个本地目录就好,最大构建数看着填,然后保存,此时的节点是不能用的,重新打开这个节点,中间会显示各个系统下的命令,选择当前系统的命令,在终端直接运行即可,最后把默认节点的最大构建数填0,不然会一直提示你。
3、新建任务
名称看着填,然后我是选择多分支流水线,这个更符合我的要求,选择完后点确定。
接下来就是配置这个任务,简单说就是填写仓库地址,点击增加源,填入git地址和凭据,凭据就是对应的账号密码,之前没有填过就创建,最后保存。
创建完成会出现以下页面,下图是已经创建了两个任务了。
我们点击其中的一个任务,到以下页面
对了,上面创建任务的地方有个Build Configuration, 规则就是读取仓库分支下的Jenkinsfile文件,有这个Jenkinsfile文件,上图才会出现。
最后还需奥配置一下邮件,也就是构建完成或发邮件,需要在系统设置的最下面,配置邮箱,这个就不叙述了,可以自行查找。
到这里,一个任务就创建好了。
3、脚本
脚本就是上述的Jenkinsfile文件
pipeline {
agent any
environment {
GIT_URL = 'https://xxx.git'
GIT_CREDENTIAL_ID = 'git'
}
parameters {
text( name: 'BRANCH', description: '分支', defaultValue: 'master', trim: true)
text( name: 'VERSION_NAME', description: '版本名称', defaultValue: '1.0.0', trim: true)
text( name: 'VERSION_CODE', description: '版本编号', defaultValue: '1', trim: true)
choice( name: 'GRADLE_BUILD_TYPE', description: 'Gradle 构建类型', choices: '构建测试包\n构建正式包')
}
stages {
stage('Init') {
steps {
script {
if (!params.BRANCH?.trim() || !params.VERSION_NAME?.trim() || !params.VERSION_CODE?.trim() || (!params.GRADLE_BUILD_TYPE?.trim())) {
error('Build parameters required')
}
}
}
}
stage('Checkout') {
steps {
git url: "${env.GIT_URL}",
branch: "${params.BRANCH}",
credentialsId: "${env.GIT_CREDENTIAL_ID}"
}
}
stage('Build') {
steps {
withGradle {
script {
def command = ''
switch(params.GRADLE_BUILD_TYPE) {
case '构建测试包':
command = 'Debug'
break
case '构建正式包':
command = 'Release'
break
}
sh "./gradlew clean"
sh "./gradlew --no-daemon assembleArm64${command} --stacktrace"
}
}
}
}
stage('Upload'){
steps {
archiveArtifacts artifacts: 'app/build/outputs/apk/arm64/debug/*.apk,app/build/outputs/apk/arm/debug/*.apk,app/build/outputs/apk/arm/release/*.apk,app/build/outputs/apk/arm64/release/*.apk', followSymlinks: false, onlyIfSuccessful: true
}
}
}
post {
always {
emailext subject: '${DEFAULT_SUBJECT}',
body: '${DEFAULT_CONTENT}',
recipientProviders: [developers(), requestor()]
}
}
}
脚本中的stage 对应上图中的各个步骤。
第一次构建的时候是没有Build with Parameters选项的,点构建,才会出现。
产物归档是要单独处理下,原来产物归档是在上面直接配置的,现在是填在pipeline里面,也就是Jenkinsfile文件里面。
stage('Upload'){
steps {
archiveArtifacts artifacts: 'app/build/outputs/apk/arm64/debug/*.apk,app/build/outputs/apk/arm/debug/*.apk,app/build/outputs/apk/arm/release/*.apk,app/build/outputs/apk/arm64/release/*.apk', followSymlinks: false, onlyIfSuccessful: true
}
}
具体命令生成可以在 DashBoard -> 任务 -> 分支 -> 流水线语法 目录下生成然后填入Jenkinsfile即可,当然这个产物只是本机上的,我们也可以上传到oss(自定义插件) 或者蒲公英平台(有对应插件),然后将对应链接归档即可。
之后,不出其他意外,这个任务就可以构建了。
Console Output菜单可以查看日志,产物也会展示在页面上。点击就会下载了,别人需要打包或者对应的apk文件,直接把当前任务给对方即可。
好了,一个Android的构建平台搭好了,目前我们是不是一行代码都没有写,哈哈哈。
三、其他
上述是使用Jenkins来构建Android的基本步骤,我们都知道Jenkins是一个持续集成的平台,我们想做任何的功能都可以往上堆,比如IOS的构建,比如构建后的发版,都可以通过Jenkins完成,当然这是后话了。
我们发现Jenkins默认的页面是不是不太好看,一个小老头,哈哈哈,也是可以改的,这里推荐个库
1、在插件管理里面安装 simple theme 插件
2、打开上述网址,选择主题色 ,选择logo,10kb以内哈,然后下载,并在jenkins系统设置页面的Theme选项下导入Extra Css ,把下载的css文件内容拷贝进去即可。
不过实测的时候,不知道什么原因,title的样色背景以及logo没有生效,不管了,直接在网页上”右键” -> “检查”
拿到布局后用css直接重新描述一番,先把jenkins-home-link给隐藏掉,然后给“logo”这个div 加个before和after,设置logo和标题
#jenkins-home-link {
display:none;
}
#page-header {
Background-color: #5D9AF8;
}
#model-link {
color: #5D9AF8;
}
.logo:before {
content: "";
width: 40px;
height: 40px;
background: url("/static/6a95f0e8/images/svgs/ic_login_logo.png");
background-size: cover;
}
.logo:after {
content: "我是标题";
text-transform:none;
font-weight: bold;
font-size: 30px;
color: white;
line-height: 40px;
margin-left: 20px;
}
然后这个logo直接放到 /Users/xxx/.jenkins/war/images 目录下面即可 也就是你的安装目录,如果你不是安装在这里的,就换成的对应的安装目录即可,最后在jenkins系统设置导入这个css,完事后,重启服务
完美!!!
四、使用Docker部署
1、下载Docker客户端
mac: docs.docker.com/docker-for-…
windows: docs.docker.com/docker-for-…
也可以脚本安转:
// 脚本安装方式
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
记得把docker加到环境变量配置中
export DOCKER_PATH="/Applications/Docker.app/Contents/Resources/bin"
export PATH=".$PATH:$DOCKER_PATH"
完成后记得 docker -v 一下 ,成功的话,会显示版本号
2、安装jenkins
1、查看jenkins源
通过命令 docker search jenkins 查看所有源
我使用的是jenkins/jenkins,即docker pull jenkins/jenkins,然后就是下载了。
2、启动jenkins
直接使用命令 docker run -d –name docker-jenkins -p 8008:8080 -p 50000:50000 jenkins/jenkins
jenkins启动默认使用的8080,命令里面做个映射,即http://127.0.0.1:8008 。不出意外,你的jenkins启动了,不出意外你浏览器输入http://127.0.0.1:8008就能打开以下页面了。
这个密码在docker客户端日志里面可以看到
复制输入即可,然后可以了。
当然事情肯定不会这么顺利,等我输入完密码后,直接来了个 No such plugin: cloudbees-folder ,
就是安装目录下没有cloudbees-folder插件,这个手动下载一下,然后把文件传到docker中去.
i、下载
打开链接“ftp.icm.edu.pl/packages/je…”,在最下面找到并打开“latest”目录,点击下载cloudbees-folder.hpi;
ii、上传
然后就是上传,命令结构是: docker cp /路径/文件名 容器ID:/上传路径 ,比如
docker cp /Users/xxx/Downloads/cloudbees-folder.hpi b281bb1e5e84b8efc06c5eded4d19c08f9fc77d59e50c74eb982fc6060ecd36a:/var/jenkins_home/plugins
容器ID在启动jenkins的时候,终端会返回的,查看下就好。 /var/jenkins_home/plugins是Docker中jenkins的目录。顺便说下docker往实体机传文件的命令:docker cp 容器ID:/上传路径 /路径/文件名 哈哈,长得差不多。
最后重启一下jenkins,就跟在实体机启动的一样了,安装默认插件,注册新账号,然后重启。就可以看到下面的页面了
这里说下一些设置的配置,不像在实体机上操作,比如jdk,git,直接导入本地路径即可,在Docker中,我们需要查看对应的路径后,再配置到Jenkins中。
先进入docker的环境,docker exec -it jenkins的容器id /bin/bash
- jdk:然后通过echo $JAVA_HOME来查看 java 路径在/usr/local中,然后配置进 jenkins 的 JAVA_HOME 中即可
- git:通过which git查看 git 执行文件路径为/usr/bin/git,把这个复制到 jenkins 路径中
- mvn:jenkins 容器中一般没有 maven 提供的,所以 jenkins 配置中使用 install automatically
完美!!!
剩余的一些细节问题我写在这里了 0代码搭建Android打包平台?(后篇)
五、写在最后
最后没啥可写的,就是想说点个赞再走呗,哈哈哈。。。