0代码搭建Android打包平台?(前篇)

一、扯闲篇

打包对于每个客户端开发来说是家常便饭,在整个开发流程中,我们可能会打很多次的包,本地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默认的页面是不是不太好看,一个小老头,哈哈哈,也是可以改的,这里推荐个库

afonsof.com/jenkins-mat…

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

image.png
就是安装目录下没有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

  1. jdk:然后通过echo $JAVA_HOME来查看 java 路径在/usr/local中,然后配置进 jenkins 的 JAVA_HOME 中即可
  2. git:通过which git查看 git 执行文件路径为/usr/bin/git,把这个复制到 jenkins 路径中
  3. mvn:jenkins 容器中一般没有 maven 提供的,所以 jenkins 配置中使用 install automatically
    完美!!!

剩余的一些细节问题我写在这里了 0代码搭建Android打包平台?(后篇)

五、写在最后

最后没啥可写的,就是想说点个赞再走呗,哈哈哈。。。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYDb3Kuq' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片