ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[原创]docker+jenkins+gradle+android sdk+gitee自动打包部署Gitee上的Android项目(超详细)

2020-11-30 16:30:53  阅读:172  来源: 互联网

标签:Gitee Gradle jenkins Jenkins Android gradle SDK


docker+jenkins+gradle自动打包部署Gitee上的Android项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

自动化拉取Gitee上Android项目的代码并编译打包(CI/CD)
环境:centos7
JDK:1.8
Gradle:5.1.1
Android SDK:28


一、宿主机环境的安装

说明:
- 所需环境:使用Jenkins自动编译打包Android项目为.apk文件需要依赖的环境有JDK、Gradle、Android SDK,其中SDK的安装最为重要!
- 确定版本:首先要确定自己项目所使用的JDK版本(1.8),Gradle版本(5.1.1)和SDK(28.0.3)的版本,这一点非常的重要!!!
- 容器卷挂载:通过容器卷挂载的方式(下一节会讲到),让docker中的jenkins使用外部的环境,同时也要在jenkins的系统设置中设置环境变量(Configure System–>Global properties)。

1.JDK

Jenkins自带JDK1.8版本,如果你的项目用的是11或者15,需要自己下载jdk的环境到宿主机,并在/ect/profile里面配置环境变量(以下的1.8只是做个演示)
在这里插入图片描述

并使用容器卷-v的方式让容器内部用到此环境。

2.Gradle

Jenkins的系统是可以选择合适版本的Gradle并安装,无需在宿主机安装Gradle(当然也可以容器外部安装,挂载到内部,不过有点多此一举),具体jenkins关于设置Global Tool Configuration稍后再讲,这里只是放一张图片。
在这里插入图片描述

3.Android SDK!!

这部分的安装是最重要的,需要在宿主机安装SDK环境,之后通过挂载的方式使用SDK环境!
编译安卓项目的前提要在服务器上安装SDK(不是通过Android Studio安装),但是网上查到的版本最新也只到SDK 24(比如这个网站https://www.androiddevtools.cn/就好久没更新了),So我们去官网下载。
Android使用的SDK版本在build.gradle里面查看compileSdkVersion
在这里插入图片描述
如何安装最新版本Android的SDK见我的这篇文章
https://blog.csdn.net/qq_38182842/article/details/110170630

4.Maven

这里只是顺便提一下Maven,如果是java web项目,需要打jar包或者war包,Maven是必须的,但是也可以通过jenkins关于设置Global Tool Configuration来配置你需要的Maven版本。

二、Docker安装Jenkins

官方安装教程:
https://hub.docker.com/_/jenkins

1.拉取镜像

# 拉取lts(long term support)版本 
docker pull jenkins/jenkins:lts

2.挂载外部环境

我们只需要挂载2个路径
a. 容器内的/usr/local/android-sdk (此路径名字随意,后面会配置android-sdk环境变量会用到这个路径)
b. 容器内的/var/jenkins_home
说明: Gradle和JDK我们使用jenkins提供下载的

# 只需要挂载 android-sdk 和 jenkins_home就行
docker run -d -it --name jenkins -p 8080:8080 -p 50000:50000 -v /opt/android-sdk:/usr/local/android-sdk -v /root/dockerContainerFile/jenkins:/var/jenkins_home  jenkins/jenkins:lts
# 这里顺便提一下外部jdk和maven的挂载方式
docker run -d -it --name jenkins -p 8080:8080 -p 50000:50000 -v ${JAVA_HOME}:/usr/local/jdk -v ${M2_HOME}:/usr/local/maven -v /opt/android-sdk:/usr/local/android-sdk -v /root/dockerContainerFile/jenkins:/var/jenkins_home  jenkins/jenkins:lts

# 其中${JAVA_HOME}值为/opt/jdk1.8.0_271
# ${M2_HOME}值为/opt/apache-maven-3.6.3

三、初始登录Jenkins

说明:通过8080端口访问

1.首次登录Jenkins的相关操作

  • 复制挂载目录下的/secrets/initialAdminPassword中的初始密码在这里插入图片描述
  • 选择左边的默认插件,后期我们要安装插件再另外配置
    在这里插入图片描述
  • 点击开始
    vv
  • 创建初始Admin用户
    在这里插入图片描述
  • 使用默认url连接Jenkins
    在这里插入图片描述
  • 完成
    在这里插入图片描述

四、Jenkins的插件和环境设置

1.Gitee插件和私人令牌

私人令牌是为了保障Jenkins能够成功拉取项目

  • 下载Gitee插件
    Manage Jenkins->Manage Plugins在这里插入图片描述
    搜索Gitee插件并安装
    在这里插入图片描述

  • Gitee官网生成私人令牌
    登录自己的Gitee账号 Settings->Personal access tokens
    在这里插入图片描述
    填写描述并点击commit
    在这里插入图片描述
    保存这串token值,下一步用到这个token
    在这里插入图片描述

  • 在Jenkins的系统设置中配置Gitee
    回到jenkins进入系统设置
    在这里插入图片描述
    配置Gitee连接
    在这里插入图片描述
    点击Add之后第三步进入如下,只要设置Kind和Token就行
    在这里插入图片描述
    最后一定要测试连接成功才行
    在这里插入图片描述
    最后点击Apply 再点Save

  • 本文不涉及Gitee的webhook
    什么是webhook?简单点说就是当你git push之后,jenkins会自动收到消息并构建打包我们的项目,类似"订阅-发布模型"。

2.Gradle环境

  • 进入全局工具设置Global Tool Configuration
    在这里插入图片描述
  • 安装Gradle
    说明:本例让jenkins自动安装,当然可以选择启动容器的时候挂载宿主机的Gradle的目录(Gradle版本要和Android项目用的Gradle一致,我一开始构建失败,后来才发现是Gradle版本不一致的问题)
    在这里插入图片描述

3.JDK环境

  • Jenkins默认使用jdk1.8,无需设置,如果需要用jdk11或者15请看下面
  • 如果在启动容器的时候我们挂载了 -v ${JAVA_HOME}:/usr/local/jdk
# 这里顺便提一下外部jdk和maven的挂载方式
docker run -d -it --name jenkins -p 8080:8080 -p 50000:50000 -v ${JAVA_HOME}:/usr/local/jdk -v ${M2_HOME}:/usr/local/maven -v /opt/android-sdk:/usr/local/android-sdk -v /root/dockerContainerFile/jenkins:/var/jenkins_home  jenkins/jenkins:lts
# 其中${JAVA_HOME}值为/opt/jdk1.8.0_271
# ${M2_HOME}值为/opt/apache-maven-3.6.3
  • 那么我们在下面的JAVA_HOME就填写容器内路径/usr/local/jdk
    在这里插入图片描述

4.Android SDK环境

  • 来到系统设置
    在这里插入图片描述

  • 设置环境变量ANDROID_SDK_ROOT
    它的值与之前挂载的路径一致-v /opt/android-sdk:/usr/local/android-sdk

# 只需要挂载 android-sdk 和 jenkins_home就行
docker run -d -it --name jenkins -p 8080:8080 -p 50000:50000 -v /opt/android-sdk:/usr/local/android-sdk -v /root/dockerContainerFile/jenkins:/var/jenkins_home  jenkins/jenkins:lts

在这里插入图片描述

  • SDK环境OK了

五、Jenkins构建新的项目

1.新建一个自由风格的项目

在这里插入图片描述

2.General 设置

  • Gitee Connection选择之前设置Gitee时取的那个名字
    在这里插入图片描述

说明:以下参数也可以暂时不设置,后期有需要再加(我们只要先让项目成功构建起来)。
常见的参数我找不到了,后期在下面补上

  • 添加第一个Choice Parameter:IS_JENKINS,用来在gradle构建时替换gradle.properties里定义的参数,这样可以在gradle脚本里用该参数区分当前是不是jenkins构建;
    在这里插入图片描述
  • 添加第二个Choice Parameter:BUILD_TYPE,这个参数用来配置执行不同构建类型(是执行debug还是release构建);
    在这里插入图片描述
  • 添加一个Git Parameter:GIT_TAG用来选择拉取git代码的分支,会自动识别git仓库的所有分支供构建的时候选择(需要安装git parameter插件)
    在这里插入图片描述

3.Source Code Management 源码设置

  • Repository URL填源码仓库的地址,下面的Branches to build 默认拉取master分支(如果安装了Git Parameter插件,在构建的时候可以手动选择分支)
    在这里插入图片描述

  • 点击Add,填Gitee的账户和密码
    在这里插入图片描述

4.Build Trigger 触发器设置

说明:以下是关于Webhook的配置,我们的Jenkins在本地服务器,要是Gitee通知本地的Jenkins构建还需要配置网络啥的,所以我只简单写了一下。

  • 当git push的时候构建项目
    在这里插入图片描述
  • 生成 Gitee webhook 52c09bxxxxxxxxxxxxxxxxxxa9046265
    在这里插入图片描述
  • 去Gitee.com配置webhook

5.Build 构建设置

  • Gradle Version选择之前Gradle环境中起的名字
  • 填写Tasks
    在这里插入图片描述

6.Post-build Actions 构建后行为设置

  • 添加Archive the artifacts
  • 这个路径的作用是去搜集app/build/outputs/apk/目录下的文件,并显示出来。注意这个路径是在workspace/构项目的名字/ ,下面的/app/build/outputs/apk去找文件,我们打包好的东西就在apk这个目录下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

7.进行构建测试

  • 点击build
    在这里插入图片描述
  • 耐心等待构建成功,Last Successful Artifacts里显示的就是我们构建好的项目(Post-build Actions里面没有添加Archive the artifacts的话,这边是不会显示.apk文件的 )
    在这里插入图片描述

8.大功告成

我们也可以构建后将.apk文件通过ftp发送到指定的服务器,也可以生成二维码给测试人员提供下载。这边就不介绍啦。


总结

第一次用Jenkins构建项目,也走了不少坑,大大小小尝试了24次:

  • gradle版本的不一致;
  • SDK环境配不对;
  • 文件没给写权限导致构建的时候不能写入;
  • 挂载了jdk11但其实项目用的jdk是1.8(用jenkins默认的就行);
  • 找不到打包之后的.apk的路径(使用Archive the artifacts在workspace显示打包好的文件)

以上步骤都已经过亲自验证,不会有什么问题。其中我觉得Android SDK环境的配置挺重要的。
才疏学浅,更高级的Jenkins配置还在学习中,请大家多多指教~

参考文档

https://blog.csdn.net/wangxudongx/article/details/108173608
https://blog.csdn.net/weixin_38062353/article/details/82357085
https://blog.csdn.net/wc1695040842/article/details/102230401

标签:Gitee,Gradle,jenkins,Jenkins,Android,gradle,SDK
来源: https://blog.csdn.net/qq_38182842/article/details/110201832

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有