765DevOps

Thinking is the problem, Doing is the answer !

0%

JenkinsK8s集群部署AndroidSDK安装

如过你的Jenkins是部署在K8s集群中的,那需要支持Android打包的情况。Android SDK安装与更新怎么做呢?
本文将介绍在K8s集群中如何安装和更新 Android SDK

1. K8s集群中Android SDK安装与更新方案设计

1.1 Android SDK Tools镜像制作

  • 使用Android SDK Tools

Android在Jenkins中构建打包,只需要命令行工具即可(Command line tools only)。

只需安装Android SDK Tools,这是 Android SDK 的一个组件。它包含了 Android 的全套开发和调试工具,在Android studios首页即可下载(位置:Command line tools only),点击进入

  • 使用sdkmanager进行工具管理

使用 Android 的 sdkmanager 命令行工具进行查看、安装、更新和卸载 Android SDK 的软件包,sdkmanager工具介绍说明,点击进入

注:sdkmanager工具在 Android SDK Tools 软件包(25.2.3 及更高版本)中提供,并位于 android_sdk/tools/bin/ 目录下,无需独立安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Android SDK Tools Dockerfile
FROM harbor.demo.com/base/jre_centos:8u202_7.8
USER root

ENV SDK_TOOLS_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" \
ANDROID_HOME="/opt/app/android-sdk"

RUN yum install -y zip unzip
RUN mkdir -p "$ANDROID_HOME" .android \
&& cd "$ANDROID_HOME" \
&& curl -o sdk-tools.zip $SDK_TOOLS_URL \
&& unzip sdk-tools.zip \
&& rm sdk-tools.zip
RUN yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses \
&& $ANDROID_HOME/tools/bin/sdkmanager --update

#RUN $ANDROID_HOME/tools/bin/sdkmanager --install "build-tools;29.0.1" "platforms;android-29"

CMD ["/bin/bash"]

1.2 将Android sdk作为PVC挂载出来

  • k8s中申请50G的pvc挂载点

  • Android SDK Tools镜像挂载PVC

1
2
// 安装Android sdk工具
sdkmanager --install XXX

1.3 Android SDK更新

  • 使用cronjob重新发布一次即可

Cronjob更新稳定性不是很好,如果没有成功安装SDK工具,则可进入容器中,直接执行sdkmanager更新命令(cluster: cluster_pro 内网正式, namespace:jenkins,pod:androidsdk-xxxxx)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// cronjob的部署示例:
jobs:
- name: androidsdk-job
# job运行环境集群,和 global.env 的值对应
runEnv:
- dev
- test
- pdt
image:
repository: harbor.demo.com/cicd/android-sdk-tools
tag: v0.0.1
pullPolicy: Always
command:
- "/opt/app/android-sdk-v/tools/bin/sdkmanager"
- "--install"
args:
#### ./sdkmanager --list sdk包 ####
# - "build-tools;19.1.0"
# - "build-tools;20.0.0"
# - "build-tools;21.1.2"
# - "build-tools;22.0.1"
# - "build-tools;23.0.1"
# - "build-tools;23.0.2"
...

1.4 K8s集群中Android SDK安装与更新

  • 使用Helm进行部署和更新,此处我们使用的是Helm方式部署的(有关Helm的部署,将后续分享……)
1
// TODO chart部署仓库

2 Jenkins slave节点使用Android SDK工具

  • 配置Jenkins slave节点

添加一个环境变量和挂载卷

Jenkins配置

  • Jenkinsfile中使用

直接使用对应Jenkins slave节点,执行gradle命令即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pipeline {
// 全局执行代理
agent {
kubernetes {
cloud 'kubernetes'
label 'label-gradle'
}
}
stages {
stage ("gradle构建") {
steps {
sh "./gradlew clean " +
"channelRelease --stacktrace " +
"-PBUILD_NUMBER=${env.BUILD_NUMBER}"
}
}
}