CI/CD 学习之路

目录

简介:

1、工具介绍:

2、搭建jenkins

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

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

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

        4)访问jenkins

        5)配置jenkins

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

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

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

        3)写入脚本

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

             ① 在jenkins内部创建ssh目录   

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

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

        6)开始执行构建命令

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

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

        1)下载ngrok

        2)配置环境变量

        3)去ngrok注册账号      uqngrok — Log in

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

        5)配置 ngrok token到本地

        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 anyenvironment {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 地址

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920127.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马斯克宣布开源Grok 2.5:非商业许可引争议,模型需8×40GB GPU运行,Grok 3半年后开源

昨晚&#xff0c;马斯克在 X 平台连续发布多条消息&#xff0c;宣布其人工智能公司 xAI 已正式开源 Grok 2.5 模型。这款模型是 xAI 在 2024 年的主力模型&#xff0c;如今完全向公众开放。与此同时&#xff0c;马斯克还预告了下一代模型 Grok 3 的开源计划&#xff0c;预计将在…

DMP-Net:面向脑组织术中成像的深度语义先验压缩光谱重建方法|文献速递-深度学习人工智能医疗图像

Title题目DMP-Net: Deep semantic prior compressed spectral reconstruction methodtowards intraoperative imaging of brain tissueDMP-Net&#xff1a;面向脑组织术中成像的深度语义先验压缩光谱重建方法01文献速递介绍脑肿瘤可分为原发性和继发性两类。原发性脑肿瘤多发生…

【nl2sql综述】2025最新综述解读

论文地址&#xff1a;https://arxiv.org/pdf/2408.05109 解读&#xff1a;迈向数据民主化——大型语言模型时代下的Text-to-SQL技术综述 近期&#xff0c;一篇名为《A Survey of Text-to-SQL in the Era of LLMs》的综述论文系统性地梳理了自然语言到SQL查询&#xff08;Text-t…

logback-spring.xml 文件

一.概述这是一个日志文件&#xff0c;主要用来对应用程序的日志进行记录&#xff0c;并且可以配置日志的一些格式和规则。二.读取机制1.SpingBoot自动识别进行文件扫描时&#xff0c;当在 classpath 下发现名为 logback-spring.xml 的文件时&#xff0c;Spring Boot 会自动加载…

LeetCode Hot 100 第二天

1. 283 移动零 链接&#xff1a;题目链接 题解&#xff1a; 要求&#xff1a;时间复杂度 < O (n^2) 题解&#xff1a;将非零元素依次往前移&#xff08;占据0元素的位置&#xff09;&#xff0c;最后再将0元素填充至数组尾。时间复杂度O(n)&#xff0c;用一个指针x来维护非…

04-Maven工具介绍

文章目录1、Maven官网2、Maven的3个重要功能3、Maven安装3.1 安装教程的视频3.2 安装教程的文本1、Maven官网 https://maven.apache.org/ 2、Maven的3个重要功能 黑马程序员JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版 3、Maven安装 3.1 安装教程的视频 …

基于开源 AI 智能名片链动 2+1 模式 S2B2C 商城小程序的新开非连锁品牌店开业引流策略研究

摘要&#xff1a;本文聚焦于一家新开且地理位置优越、目标客户为周边“80 后”“90 后”上班族的非连锁品牌店。在明确店铺定位、完成店内设计与菜品规划等基础工作后&#xff0c;探讨如何在新店开业初期有效打响品牌、吸引目标客户。通过引入开源 AI 智能名片链动 21 模式 S2B…

UE5多人MOBA+GAS 54、用户登录和会话创建请求

文章目录创建主菜单需要的创建主菜单游戏模式创建主菜单游戏控制器创建主菜单界面UI实现登录游戏实例创建等待界面配置和获取协调器 URL撰写和发送会话创建请求创建主菜单需要的 创建主菜单游戏模式 MainMenuGameMode 创建主菜单游戏控制器 MainMenuPlayerController #p…

SCSS上传图片占位区域样式

_App.scss// 上传图片占位区域样式---------------------------------------- [theme"uploadImage"] {transition: 0.2s;position: relative;cursor: pointer;border-radius: 4px;/*居中填满*/background-repeat: no-repeat;background-position: center;background-…

Prometheus+Grafana监控mysql

1、简述 使用 Prometheus 结合 Grafana 监控 MySQL 是一套成熟且广泛应用的方案&#xff0c;能实现对 MySQL 性能、状态等指标的实时采集、存储、可视化及告警。 2、整体架构说明 Prometheus&#xff1a;负责定时从 MySQL 采集监控指标&#xff08;需借助 Exporter&#xff0…

网络流量分析——Tcpdump 数据包过滤

文章目录.PCAP 文件Tcpdump 数据包过滤过滤和高级语法选项有用的 TCPDump 过滤器主机过滤器源/目标过滤器使用源和端口作为过滤器将目标与网络过滤器结合使用协议过滤器 - 通用名称协议过滤器 - 编号端口过滤器端口范围过滤器小于/大于过滤器利用更大的AND 过滤器无滤镜的基本捕…

DeepSeek V3.1 横空出世:重新定义大语言模型的边界与可能

当大语言模型领域的竞争进入白热化阶段&#xff0c;一场静默的技术革命正在悄然酝酿。2025 年8月19日&#xff0c;DeepSeek 团队带着全新升级的 V3.1 版本强势登场&#xff0c;这个被业内称为 “智能体时代敲门砖” 的模型&#xff0c;究竟藏着多少颠覆认知的黑科技&#xff1f…

Unity Netcode for GameObjects(多人联机小Demo)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、安装 Netcode for GameObjects二、做个小Dome1.NetcodeManageNet2.创建UI3.创建预制体4.代码介绍UI代码随机位置代码总结前言 Netcode for GameObjects 是 …

Ant Design for UI 选择下拉框

1. 单选框 与多选框<template><div class"demo-page" style"padding: 40px; max-width: 1200px; margin: 0 auto; font-family: Microsoft YaHei, Arial, sans-serif;"><h1 style"color: #1890ff; text-align: center; margin-bottom…

动手学深度学习01-引言

动手学深度学习pytorch 参考地址&#xff1a;https://zh.d2l.ai/ 文章目录动手学深度学习pytorch1-第01章-引言1. 机器学习/深度学习基础1.1 什么是机器学习&#xff1f;1.2 深度学习与机器学习的关系&#xff1f;2. 数据&#xff08;Data&#xff09;2.1 什么是样本、特征、标…

大模型提示词工程背后的原理:深入理解Prompt Learning(提示学习)

“ 知其然也要知其所以然&#xff0c;为什么会有提示词工程&#xff1f;” 了解和使用过大模型的人应该都知道提示词工程&#xff0c;即使不了解提示词工程&#xff0c;至少也应该听说过&#xff0c;提示词工程说白了就是一种和大模型交流的方法&#xff0c;它的作用就是让大模…

AI 智能体安全设计模式:从三大“反模式”看如何构建可信的 AI 系统

摘要&#xff1a;当我们将 AI 智能体&#xff08;Agent&#xff09;从实验原型推向生产环境时&#xff0c;许多团队在不经意间重复着一些危险的错误实践。这些反复出现的错误&#xff0c;在软件工程中被称为“反模式”&#xff08;Anti-Patterns&#xff09;。本文基于 Curity …

【前端安全】前端安全第一课:防止 XSS 和 CSRF 攻击的常见手法

【前端安全】前端安全第一课&#xff1a;防止 XSS 和 CSRF 攻击的常见手法 所属专栏&#xff1a; 《前端小技巧集合&#xff1a;让你的代码更优雅高效》 上一篇&#xff1a; 【性能指标】决战性能之巅&#xff1a;深入理解核心 Web 指标&#xff08;Core Web Vitals&#xff0…

QT新建文件或者项目解释:那些模板分别是什么意思?

在 Qt Creator 的 “New File or Project” 界面中&#xff0c;不同分类下的模板有着不同的用途和适用场景&#xff0c;以下是对各部分的详细说明&#xff1a;一、“项目” 分类下1. Application&#xff08;应用程序&#xff09;用途&#xff1a;用于创建可直接运行的应用程序…

《支付回调状态异常的溯源与架构级修复》

在后端开发领域&#xff0c;能通过错误日志直接定位的问题&#xff0c;只能算作“基础挑战”&#xff1b;而那些依赖特定数据量、并发量或外部交互场景才会触发的隐性问题&#xff0c;往往像藏在电路中的虚焊点&#xff0c;平时看似正常&#xff0c;关键时刻却会导致整个系统断…