CI/CD 学习之路

目录

简介:

1、工具介绍:

2、搭建jenkins

1)创建一个文件Dockerfile,文件无后缀,写入以下代码

[2)在Dockerfile文件所在目录执行(my-jenkins-android 未自定义镜像名称)](#2)在Dockerfile文件所在目录执行(my-jenkins-android 未自定义镜像名称))

[3)运行容器,注意替换 "/path/to/your/android-sdk"](#3)运行容器,注意替换 “/path/to/your/android-sdk”)

4)访问jenkins

5)配置jenkins

3、创建任务及搭建编译Android必要配置

[1)创建项目 :点击New item 护着 Create a job](#1)创建项目 :点击New item 护着 Create a job)

2)起一个名字,这里我们选择流水线,Pipeline

3)写入脚本

4)配置ssh(如果使用ssh://的命令需要这一步,如果https://,则在地址中添加账号密码即可)

[① 在jenkins内部创建ssh目录](#① 在jenkins内部创建ssh目录)

[② copy本地config、pem、known_hosts文件到这里](#② copy本地config、pem、known_hosts文件到这里)

5)补全SDK中的cmdline-tools文件(如果存在此目录则跳过---下载的sdk为linux系统版本会包含此目录)

6)开始执行构建命令

7)查看构建结果或构建输出

4、内网穿透(本地服务暴漏给外网)

1)下载ngrok

2)配置环境变量

[3)去ngrok注册账号 uqngrok --- Log in](#3)去ngrok注册账号 uqngrok — Log in)

[4)下载一个令牌软件,需要用于以后的登录认证,例如 Google Authenticator,](#4)下载一个令牌软件,需要用于以后的登录认证,例如 Google Authenticator,)

[5)配置 ngrok token到本地](#5)配置 ngrok token到本地)

[6)启动 ngrok ,下面命令中的8080为你要暴漏的端口号,与jenkins 服务一致即可](#6)启动 ngrok ,下面命令中的8080为你要暴漏的端口号,与jenkins 服务一致即可)

常见命令:


简介:

通过在本地搭建jenkins服务,运行Android项目(参考 阿里摩天轮),这里为初级设置,旨在能让项目在jenkin运行起来

1、工具介绍:

AI工具必不可少,这是最好的搜索引擎,半个老师 ,配置过程中遇到的问题可以问它,但是需要辨别真伪,ai也不是全能的 ,可能会回复错误信息误导大家,但总体要比人脑强大DeepSeekChat with DeepSeek AI -- your intelligent assistant for coding, content creation, file reading, and more. Upload documents, engage in long-context conversations, and get expert help in AI, natural language processing, and beyond. | 深度求索(DeepSeek)助力编程代码开发、创意写作、文件处理等任务,支持文件上传及长文本对话,随时为您提供高效的AI支持。https://chat.deepseek.com/

jenkins:布置任务的平台

wsl:Windows Subsystem for Linux 一般系统自带,但是可能遇到系统内嵌的版本过低,需要升级的问题。jenkins会在这个子系统里

docker:管理jenkins 镜像、容器的工具

ngrok:内网穿透,让外网可以访问jenkins地址(若无需外网访问,或已经布置在了服务器,则不需要)

2、搭建jenkins

1)创建一个文件Dockerfile,文件无后缀,写入以下代码
复制代码
FROM jenkins/jenkins:lts-jdk17
USER root

# 安装必要工具
RUN apt update && apt install -y wget unzip

# 设置Android SDK环境
ENV ANDROID_HOME=/opt/android-sdk
ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/bin:$ANDROID_HOME/platform-tools

# 下载Android命令行工具---代码标注1
RUN mkdir -p ${ANDROID_HOME} && cd ${ANDROID_HOME} && \
    wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip && \
    unzip commandlinetools-linux-*.zip && \
    mv cmdline-tools latest && \
    mkdir cmdline-tools && \
    mv latest cmdline-tools/

# 接受许可证并安装组件---代码标注1
RUN yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses && \
    ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"

USER jenkins

以上代码中,有两处写"代码标注1",如果不想在镜像内重复下载SDK,想使用本地存在的SDK,并且 容器opt/android-sdk 目录下存在文件夹"cmdline-tools",可以去除这两段代码,在后面的创建容器时,需要加挂载SDK的指令(见第三步:运行容器)

方案 优点 缺点
镜像内安装 SDK 自包含,无需宿主机依赖 镜像体积大,更新 SDK 需重建镜像
挂载本地 SDK 节省空间,SDK 版本与宿主机一致 需管理宿主机 SDK 权限和路径
2)在Dockerfile文件所在目录执行(my-jenkins-android 未自定义镜像名称)

docker build -t my-jenkins-android .

3)运行容器,注意替换 "/path/to/your/android-sdk"
复制代码
docker run -d \
  --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v /path/to/your/android-sdk:/opt/android-sdk \  # 挂载本地 SDK
  -v jenkins_data:/var/jenkins_home \
  my-jenkins-android

这一步运行完成,会输出一个密钥,记录下来,登录jenkins页面的时候需要输入

如下图

可以在docker 客户端 的Containers中看到多出来的一个容器

4)访问jenkins

通过上面命令可以看到我们设置的端口号未8080,localhost:8080 来访问这个jenkins容器

输入前面创建容器时返回的密钥,如果忘记了 去/var/jenkins_home/secrets/initialAdminPassword这个下面找(docker中可以用UI 窗口 查看),这是容器挂载地址。

如果使用命令 先进入 容器

docker exec -u root -it android-jenkins /bin/bash

解释:

1.android-jenkins为容器名称

2.-u root 可不加,这个指令表示root 权限进入 容器

5)配置jenkins

1.下载插件---按推荐下载

2.创建管理账号

3.填写挂载的Url

4.登陆账号

到这一步jenkins已创建完成

3、创建任务及搭建编译Android必要配置

1)创建项目 :点击New item 护着 Create a job
2)起一个名字,这里我们选择流水线,Pipeline
3)写入脚本

①直接点击左侧Pipeline,写入脚本

复制代码
pipeline {
    agent any
    environment {
        ANDROID_HOME = '/opt/android-sdk'
        PATH = "${ANDROID_HOME}/tools:${env.PATH}"  // 安全追加PATH
    }
    stages {
        stage('Clean Workspace') {
            steps {
                cleanWs()  // 或者使用 deleteDir()
            }
        }
stage('Checkout') {
            steps {
                sh '''
                    echo "=== 开始克隆代码 ==="
                    export GIT_SSH_COMMAND="ssh -i /var/jenkins_home/.ssh/joel.pem -o StrictHostKeyChecking=no"
                    git clone -b <分支名称> <git地址> .
                    echo "=== 代码克隆完成 ==="
                '''
            }
        }

        // 明确构建目录(二选一)
        stage('Build') {
            steps {
                dir('webproject') {  // 如果Gradle项目在webproject子目录
                    sh 'chmod +x ./gradlew'
                    sh './gradlew assembleRelease_gp'  //构建命令 
                        //默认Release 命令应该是./gradlew assembleRelease
                }
                // 或者直接使用根目录(删除dir块)
            }
        }

        stage('Archive') {
            steps {
                // 精确指定APK路径
                archiveArtifacts artifacts: 'webproject/app/release_gp/*.apk', 
                fingerprint: true
            }
        }
    }
}

注意:

① git地址与分支名称的替换;

② 构建命令根据情况修改(assemble+buildTypeName,name首字母大写,例如assembleRelease,如果构建abb 则assemble替换为bundle);

③ 输出路径及名称更改(assemble命令对应后缀为apk,bundle对应aab)

4)配置ssh(如果使用ssh://的命令需要这一步,如果https://,则在地址中添加账号密码即可)
① 在jenkins内部创建ssh目录

1. 进入容器内部的 shell

docker exec -it jenkins /bin/bash

2. 进入 jenkins_home 目录

cd /var/jenkins_home

#进入之后 输入dir 或ls命令可以看到所有文件,如果存在.ssh,跳过第三步

3. 创建 .ssh 目录

mkdir .ssh

4. 设置严格的权限(SSH 对权限非常敏感,组和其他用户不能有写权限)

chmod 700 .ssh

5. 退出容器 或直接按Ctrl+Z

exit

② copy本地config、pem、known_hosts文件到这里

(以下命令中中间的" jenkins"替换成自己的容器名称,在步骤2.3 的命令里 --name)

#copy 配置文件

docker cp C:/Users/<用户名>/.ssh/config jenkins:/var/jenkins_home/.ssh/config

#配置密钥

docker cp C:/Users/<用户名>/.ssh/pub.pem jenkins:/var/jenkins_home/.ssh/pub.pem

docker cp C:/Users/<用户名>/.ssh/known_hosts jenkins:/var/jenkins_home/.sshknown_hosts

5)补全SDK中的cmdline-tools文件(如果存在此目录则跳过---下载的sdk为linux系统版本会包含此目录)

创建临时目录并进入

mkdir -p /tmp/android-cmdline

cd /tmp/android-cmdline

下载最新版本的 command line tools

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

解压到 Android SDK 目录

unzip commandlinetools-linux-9477386_latest.zip -d /opt/android-sdk/

移动文件到正确的位置

mv /opt/android-sdk/cmdline-tools /opt/android-sdk/latest

mkdir -p /opt/android-sdk/cmdline-tools

mv /opt/android-sdk/latest /opt/android-sdk/cmdline-tools/

清理临时文件

rm -rf /tmp/android-cmdline

rm -f /opt/android-sdk/commandlinetools-linux-*.zip

设置环境变量

export ANDROID_HOME=/opt/android-sdk

export PATH=ANDROID_HOME/cmdline-tools/latest/bin:PATH

6)开始执行构建命令
7)查看构建结果或构建输出

4、内网穿透(本地服务暴漏给外网)

1)下载ngrok

在 Jenkins 服务器上下载 ngrok

wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz

tar -xzf ngrok-v3-stable-linux-amd64.tgz

或者直接下载

curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null

echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list

sudo apt update && sudo apt install ngrok

2)配置环境变量

将 ngrok 移动到 /usr/local/bin/

mv /ngrok /usr/local/bin/ chmod +x /usr/local/bin/ngrok

3)去ngrok注册账号uqngrok --- Log in
4)下载一个令牌软件,需要用于以后的登录认证,例如 Google Authenticator,
5)配置 ngrok token到本地

ngrok config add-authtoken $YOUR_AUTHTOKEN

6)启动 ngrok ,下面命令中的8080为你要暴漏的端口号,与jenkins 服务一致即可

ngrok http 8080

命令执行完之后可以看到输出这个窗口,接下来可以用这个地址在不同网络访问试一下了!!

需要登陆自己在jenkins设置的账号才能登录,在设置中可以增加账号

常见命令:

1、进入容器( 中间 -u root 表示 权限 可不带)

docker exec -u root -it android-jenkins /bin/bash

2、查看镜像:

docker images

3、创建容器

docker run -d \ --name android-jenkins \ -p 8080:8080 -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /opt/android-sdk:/opt/android-sdk \my-android-jenkins

或者在powerShell 中执行

docker run -d `

--name android-jenkins `

-p 8080:8080 -p 50000:50000 `

-v jenkins-data:/var/jenkins_home `

-v ${env:LOCALAPPDATA}/Android/Sdk:/opt/android-sdk `

my-android-jenkins

4、再次启动容器

docker start android-jenkins

停止

docker stop android-jenkins

删除

docker rm android-jenkins

.强制停止并删除(如果容器卡住)

docker rm -f android-jenkins

删除关联的存储卷( 彻底清理数据(包括 Jenkins 配置和构建历史))

docker volume rm jenkins-data

显示列表(容器内部linux 命令)

ls

遇到其他问题,尽可问AI,文章头部给出了deepseek 地址

若文章中有错误的地方,欢迎指正!