Gradle实战-13-Jenkins环境搭建和测试

前言:

我们Android开发在工作中经常会遇到这种问题,你在继续进行版本开发的时候,测试让你给他打一个指定版本的包,但是你正在忙碌敲代码,这时就未免在时间上冲突了。为了解决这个问题,可以让测试自己去拉取代码,自己去打包,岂不是很完美,Jenkins就是这样一款工具,可以帮助我们自动化的完成编译、打包工作。

准备:

1. 首先准备Jenkins包,具体的可以在官方网站上获取 war 包。地址是:War Jenkins Packages

2. 下载 JDK11 

因为Oracle要注册,但是感觉流程很麻烦,找到一个网址,可以下载开源的OpenJDK,地址如下:Java Platform, Standard Edition 11 ReferenceImplementations

找到下载链接,在命令行中执行命令:

wget -c https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz

下载之后,解压

tar zxvf openjdk-11+28_linux-x64_bin.tar.gz

然后配置环境变量并生效:

[root@anonymous openjdk-11]# vim /etc/profile

#export JAVA_HOME=/usr/lib/jdk1.8.0_161
#/usr/lib/openjdk-11
export JAVA_HOME=/usr/lib/openjdk-11
[root@anonymous openjdk-11]# source /etc/profile

2. Git 安装

Git 其实已经安装了,那么就检测一下版本:

-bash-4.2# git --version
git version 1.8.3.1

3. Gradle安装

Gradle 其实要安装比较新的版本,因为AndroidStudio新创建的项目的Gradle版本是比较高的。Gradle下载地址:gradle 下载地址 https://gradle.org/releases/

wget -c https://downloads.gradle-dn.com/distributions/gradle-7.3.3-bin.zip

配置环境变量:

-bash-4.2# vim /etc/profile
-bash-4.2# source /etc/profile

配置的内容如下: 

export JAVA_HOME=/usr/lib/openjdk-11
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export GRADLE_HOME=/usr/lib/gradle-7.3.3
export CMAKE_PATH=/usr/lib/cmake-3.14.3/bin
export ANDROID_NDK=/usr/lib/android-ndk-r14b
export NDK_PATH=/usr/lib/android-ndk-r14b
export GCC_HOME=/opt/rh/devtoolset-8/root/usr/bin
export NODE_HOME=/lib/node-v12.18.3-linux-x64/bin
export NGINX_HOME=/usr/local/nginx/sbin
export YASM_PATH=/usr/local/bin/yasm/bin
export PKG_CONFIG_PATH=/home/jack/cpp_learn/mymath
export NVM_PATH=/lib/nvm/nvm-0.38.0
export PATH=$NVM_PATH:$YASM_PATH:$GRADLE_HOME/bin:$JAVA_HOME/bin:$CMAKE_PATH:$ANDROID_NDK:$NDK_PATH:$GCC_HOME:$NGINX_HOME:$PATH

检测版本:

-bash-4.2# gradle --version

4. 下载AndroidSDK 

下载命令行工具

-bash-4.2# wget -c https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip

解压之后进入根目录:

-bash-4.2# cd cmdline-tools
-bash-4.2# ls -l
total 120
drwxr-xr-x  2 root root   4096 Mar 25 18:55 bin
drwxr-xr-x 17 root root   4096 Mar 25 18:55 lib
-rwxr-xr-x  1 root root 108975 Jan  1  2010 NOTICE.txt
-rwxr-xr-x  1 root root     84 Jan  1  2010 source.properties
-bash-4.2# cd bin
-bash-4.2# ls -l
total 56
-rwxr-xr-x 1 root root 5321 Jan  1  2010 apkanalyzer
-rwxr-xr-x 1 root root 5312 Jan  1  2010 avdmanager
-rwxr-xr-x 1 root root 5280 Jan  1  2010 lint
-rwxr-xr-x 1 root root 5253 Jan  1  2010 profgen
-rwxr-xr-x 1 root root 5253 Jan  1  2010 retrace
-rwxr-xr-x 1 root root 5309 Jan  1  2010 screenshot2
-rwxr-xr-x 1 root root 5319 Jan  1  2010 sdkmanager

下载SDK:

-bash-4.2# ./sdkmanager --list --channel=0
Error: Could not determine SDK root.
Error: Either specify it explicitly with --sdk_root= or move this package into its expected location: <sdk>/cmdline-tools/latest/
-bash-4.2# 

发现执行该命令有问题,在cmdline-tools 根目录下创建 latest 目录,然后拷贝 cmdline-tools 目录下的文件到 latest目录中:

-bash-4.2# mkdir latest
-bash-4.2# mv bin/ lib/ NOTICE.txt source.properties -t latest/
-bash-4.2# ls -l
total 4
drwxr-xr-x 4 root root 4096 Mar 25 18:58 latest
-bash-4.2# cd latest/
-bash-4.2# ls
bin  lib  NOTICE.txt  source.properties
-bash-4.2# cd bin
-bash-4.2# ls 
apkanalyzer  avdmanager  lint  profgen  retrace  screenshot2  sdkmanager

再次执行命令,会展示不同版本的SDK

-bash-4.2# ./sdkmanager --list --channel=0
[=======================================] 100% Computing updates...        

使用如下命令安装对应版本的 Android SDK,--sdk_root 用于设置SDK的目录

-bash-4.2# ./sdkmanager "build-tools;30.0.3" "platforms;android-30" --sdk_root=/usr/lib/android_sdk

查看下载的内容:

cd /usr/lib/android_sdk
drwxr-xr-x   3 root  root       4096 Mar 25 19:03 build-tools
drwxr-xr-x   3 root  root       4096 Mar 25 19:03 platforms
drwxr-xr-x   6 root  root       4096 Mar 25 19:03 tools
drwxr-xr-x   8 root  root       4096 Mar 25 19:02 emulator
drwxr-xr-x   3 root  root       4096 Mar 25 19:02 platform-tools
drwxr-xr-x   3 root  root       4096 Mar 25 19:02 patcher
drwxr-xr-x   2 root  root       4096 Mar 25 19:02 licenses

配置环境变量并生效:

export JAVA_HOME=/usr/lib/openjdk-11
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export GRADLE_HOME=/usr/lib/gradle-7.3.3
export ANDROID_SDK=/usr/lib/android_sdk
export CMAKE_PATH=/usr/lib/cmake-3.14.3/bin
export ANDROID_NDK=/usr/lib/android-ndk-r14b
export NDK_PATH=/usr/lib/android-ndk-r14b
export GCC_HOME=/opt/rh/devtoolset-8/root/usr/bin
export NODE_HOME=/lib/node-v12.18.3-linux-x64/bin
export NGINX_HOME=/usr/local/nginx/sbin
export YASM_PATH=/usr/local/bin/yasm/bin
export PKG_CONFIG_PATH=/home/jack/cpp_learn/mymath
export NVM_PATH=/lib/nvm/nvm-0.38.0
export PATH=$NVM_PATH:$YASM_PATH:$ANDROID_SDK/tools:$ANDROID_SDK/tools/bin:$ANDROID_SDK/platform-tools:$GRADLE_HOME/bin:$JAVA_HOME/bin:$CMAKE_PATH:$ANDROID_NDK:$NDK_PATH:$GCC_HOME:$NGINX_HOME:$PATH

5. 搭建 Jenkins 网站:

前面已经下载好了 jenkins 的war包,其实可以很简单的执行,这里我们采用脚本启动项目,脚本是start_jenkins.sh,内容如下:

#!/bin/bash  
JENKINS_ROOT=/home/jack/jenkins  
export JENKINS_HOME=$JENKINS_ROOT/home  
java -jar $JENKINS_ROOT/jenkins.war --httpPort=8080

启动 Jenkins 命令:

/home/jack/jenkins
-bash-4.2# ./start_jenkins 
Running from: /home/jack/jenkins/jenkins.war
webroot: /home/jack/jenkins/home/war

访问网站:http://192.168.1.8:8080/

初次使用 Jenkins,我们要设置好自己的用户名和密码,并且按照推荐的方式安装好相关的插件,比如 Gradle 插件,这样就可以调用 Gradle 脚本。

下面是已经搭建好的Jenkins平台。

 系统管理:

 安装 JDK 

 设置JDK配置

 设置Git配置

Gradle 配置:

Gradle-6.7.1 设置

Gradle-7.3.3 设置

系统环境配置:

 注意:这里设置的ANDROID_HOME 不要写错,否则在后面的编译环节会出现找不到SDK的问题。

构建编译任务: 

1. 点击新建任务

2. 设置任务名称和任务类型:

3. 点击确定,进入到配置页面:

4. 可以看到,我们需要设置Git源码地址:

我们新建一个Android项目,然后执行相关的命令推送到Gitee,等待后续的代码拉取操作。

C:\Users\PCWin10\AndroidStudioProjects>cd AndroidTest
C:\Users\PCWin10\AndroidStudioProjects\AndroidTest>git init
Initialized empty Git repository in 
C:\Users\PCWin10\AndroidStudioProjects\AndroidTest>git add .
C:\Users\PCWin10\AndroidStudioProjects\AndroidTest>git commit -m "first commit"
C:\Users\PCWin10\AndroidStudioProjects\AndroidTest>git remote add origin https://gitee.com/happiness365/android-test.git

C:\Users\PCWin10\AndroidStudioProjects\AndroidTest>git push -u origin "master"
Enumerating objects: 88, done.
Counting objects: 100% (88/88), done.
Delta compression using up to 4 threads
Compressing objects: 100% (68/68), done.
Writing objects: 100% (88/88), 101.56 KiB | 5.64 MiB/s, done.
Total 88 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/happiness365/android-test.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.

C:\Users\PCWin10\AndroidStudioProjects\AndroidTest>

 在推送代码到Gitee的时候,会弹框要求输入Gitee的账户密码,输入即可。我的密码:

1120335370@qq.com/asdzxc123456

注意,在推送的过程,还碰到一个问题,需要我们设置Git的邮箱和用户名,在Windows上命令如下:

C:\Users\PCWin10>git config --global user.email "1120335370@qq.com"
C:\Users\PCWin10>git config --global user.name "JackZhang"

然后在Gitee上查看推送的代码。

5. 在Jenkins上的Git地址上输入源码地址,同时也要求填入凭证,我们这里使用Gitee的账户名和密码,它会帮我们自动生成一个凭证。

这里还有重要的一步,这是 Build Steps, 选择编译的Gradle版本,以及Task任务。

 6. 保存即可。

7. 可以在Dashboard上看到新构建的任务

8. 点击 AndroidTestCase, 然后点击立即构建,即可开始构建任务:

9. 点击箭头所指位置,进入到具体的编译流程和结果:

 10. 可以查看构建的流程

 构建成功:

11. 查看构建的结果:

注意:因为AndroidStudio默认打包出来的是不带前面的,所以我们需要在Android项目中配置好签名,项目的 app/build.gradle 文件内容如下:

def releaseTime() {
    // return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日
    return new Date().format("yyyyMMdd HH-mm-ss", TimeZone.getTimeZone("GMT+8:00")) //年月日时分秒
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.androidtest"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release {
            storeFile file("keys/androidtest.jks")
            storePassword "123456"
            keyAlias "androidtest"
            keyPassword "123456"
        }
        debug {
            storeFile file("keys/androidtest.jks")
            storePassword "123456"
            keyAlias "androidtest"
            keyPassword "123456"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                if (variant.buildType.name == 'release') { //如果是release版本
                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) { //查找所有的apk
                            def fileName = "AndroidTest_${releaseTime()}_${defaultConfig.versionName}.apk" //重新定义apk的名称
                            output.outputFileName = fileName //outputFile.parent参数可以改成你你想要的发布路径
                        }
                    }
                }
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        viewBinding true
    }
}

参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值