iOS 集成Jenkins pipeline 完整流程

news2024/9/21 3:22:04

文章目录

  • 一 创建一个Jenkins pipeline 项目
  • 配置分支参数
  • 在工程中添加 ExportOptions.plist 文件
  • 创建放置打包文件的文件夹
  • 在工程里面添加shell脚本文件
  • 配置pipeline sript
  • 构建

一 创建一个Jenkins pipeline 项目

请添加图片描述

配置分支参数

请添加图片描述

选择参数化构建构成,如上图所示,通过该参数配置分支,然后我们选择 ‘选项参数’ 选项,如下图
请添加图片描述
然后我们填入参数名称和选项
请添加图片描述
请添加图片描述

在工程中添加 ExportOptions.plist 文件

手动进行archive ,获取一个 ExportOptions.plist 文件,然后将该文件放到工程中,
后面进行自动化打包需要用到里面的配置,文件位置如图
请添加图片描述

创建放置打包文件的文件夹

我这里选择放到桌面上, 在桌面上创建一个Jenkins, 并在里面创建一个Archive 和 Export 文件夹
如图
请添加图片描述

在工程里面添加shell脚本文件

为了方便管理,我们将各个步骤的脚本放到同一个文件夹里面,如图
请添加图片描述

请添加图片描述

下面贴出各个shell 脚本文件里面的命令

config.sh

#!/bin/bash -l

APP_NAME="ThePaperBase"

ROOT_PATH="/Users/liubo/Desktop/Jenkins"

CODE_PATH="/Users/liubo/.jenkins/workspace/Pipeline"

#蒲公英上的User Key
uKey="45d2be1046a2db153cda3552207c1a6a"

#蒲公英上的API Key
apiKey="840f54de6357a2b1b8f60cd4a8d107fa"

archive.sh

#!/bin/bash -l
# 设置utf8编码
export LANG=en_US.UTF-8

source ./config.sh
#获取当前版本号
get_build_version=`xcodebuild -showBuildSettings  -target ${APP_NAME} | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION = '`
old_build_version=$get_build_version
echo "old_build_version = $old_build_version"
echo "${ROOT_PATH}"
#版本号增加
agvtool new-version $(($old_build_version+1))

DATE=$(date +%Y%m%d-%H-%M-%S)
ARCHIVE_NAME="${APP_NAME}_${DATE}.xcarchive"
ARCHIVE_PATH="${ROOT_PATH}/Archive/${ARCHIVE_NAME}"
IPANAME="${APP_NAME}_${DATE}_IPA"
IPA_PATH="${ROOT_PATH}/Export/${IPANAME}"
EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/ExportOptions.plist
#删除旧的打包文件夹
rm -rdf "${ROOT_PATH}/Archive"
rm -rdf "${ROOT_PATH}/Export"
# 再创建新的打包文件夹
mkdir "${ROOT_PATH}/Archive"
mkdir "${ROOT_PATH}/Export"

cd "${CODE_PATH}"

echo "代码路径 ${CODE_PATH}"

pod install

echo "begin archive"
xcodebuild archive -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -configuration Debug -archivePath ${ARCHIVE_PATH}
echo "begin expertipa"
xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportPath "${IPA_PATH}" -exportOptionsPlist ${EXPORT_METHOD_PLIST_PATH} -allowProvisioningUpdates

uploadpgy.sh

#!/bin/bash -l

source ./config.sh

cd ${ROOT_PATH}
#要上传的ipa文件路径
IPA_PATH=`find $(pwd) -name *.ipa`

#执行上传至蒲公英的命令,这句不需要修改
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" https://www.pgyer.com/apiv1/app/upload

gitpush.sh

#!/bin/bash -l
source ./config.sh
#输出新版本号
get_current_build_veresion=`xcodebuild -showBuildSettings  -target ${APP_NAME} | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION = '`
current_build_veresion=$get_current_build_veresion

echo "current_build_veresion = $current_build_veresion"

currentBranch=$(git branch --show-current)
git add .
git commit -m "buildVersion${get_current_build_veresion}"
git push -u origin ${currentBranch}

配置pipeline sript

请添加图片描述

pipeline script 命令

pipeline {
    agent any
     environment {
        shdirect = "CIScript"
        archivesh = "./archive.sh"
        uploadPgy = "./uploadpgy.sh"
        gitpush = "./gitpush.sh"
    }
    stages {
        stage('checkout') {
            steps {
                  git branch: "${params.branch}", url: "https://gitee.com/xxxxxxx.git"
            }
        }
         stage('build') {
            steps {
                 sh """
                   chmod -R +x ${shdirect}
                   cd ${shdirect}
                    ${archivesh}
                 """
            }
        }
          stage('uploadPgy') {
            steps {
                 sh """
                 cd ${shdirect}
                    ${uploadPgy}
                 """
            }
        }
         stage('gitpush') {
            steps {
                 sh """
                 cd ${shdirect}
                    ${gitpush}
                 """
            }
        }
    }
}

构建

请添加图片描述

执行结果
请添加图片描述

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

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

相关文章

网络层实验报告

计算机网络综合实训 实训报告二 所在院系 计算机与信息工程学院 学科专业名称 计算机科学与技术 导师及职称 柯宗武 教授 提交时间 2022.3.29 网络层实验报告 (湖北师范大学计算机与信息工程学院 中国 黄石 435002) 1 IP分析 1.1背景知识 1.1.1 什么是…

SpringMVC系列-2 HTTP请求调用链

背景 本文作为 SpringMVC系列 第二篇,介绍HTTP请求的调用链:从请求进入Tomcat到数据流返回客户端的完整过程。为了尽可能把流程表达清楚,进行了很多减支处理,只关注主线逻辑。 本文也作为SpringMVC系列后续文章的基础&#xff0…

软考A计划-系统集成项目管理工程师--一般常识-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

SpringBoot 异常处理的主要组件有哪些

SpringBoot 异常处理的主要组件有哪些 在 SpringBoot 应用程序中,异常处理是一个非常重要的话题。当应用程序出现异常时,我们需要对异常进行处理,以保证应用程序的稳定性和可靠性。SpringBoot 提供了一系列的组件,用于处理各种类…

简析IAST—Agent篇 | 信息安全

一、IAST简单介绍 IAST(Interactive Application Security Testing)交互式应用程序安全测试,通过服务端部署Agent探针,流量代理/VPN或主机系统软件等方式,监控Web应用程序运行时函数执行并与扫描器实时交互,高效、精准的安全漏洞&…

LeetCode 面试题 16.19. 水域大小

LeetCode 面试题 16.19. 水域大小 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/group-anagrams/description/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 你有一个用于表示一片…

C++初阶之初识C++

初识C 1.什么是C2.C的发展史2.1 历史渊源2.2 名称由来2.3 C标准 3.C的重要性3.1 语言的使用广泛度3.2 工作领域 4.如何学习C5.结语 1.什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度…

【k8s系列】一分钟搭建MicroK8s Dashboard

本文基于上一篇文章的内容进行Dashboard搭建,如果没有看过上一篇的同学请先查阅上一篇文章 k8s系列】使用MicroK8s 5分钟搭建k8s集群含踩坑经验 使用MicroK8s搭建Dashboard很简单,只需要在Master节点按照以下几步操作 1.启用Dashboard插件 microk8s en…

“Vue3+Vite打包后,白屏沉默,重启重试无果,我该如何解决?”

每次最后打包总是会或多或少出现一些问题,昨天打包项目完之后 直接点击dist中的index.html去看看有没有什么发题,一打开奇怪的事发生了,居然是空白;但是在vscode中右键Open with Live Server一看项目没啥问题,但是部署…

下载安装Python解释器和环境变量配置

一、 python解释器下载 1.百度python官网并打开 官网网址:https://www.python.org/ 在这里插入图片描述 2.选择DownLoads,Windows并打开 3.在下图页面选择你需要的版本下载即可(本文以python 3.10.4版本演示) 在这里插入图片描述 …

C++笔记之extern关键字

C笔记之extern关键字 code review! 文章目录 C笔记之extern关键字0.前言1.extern是C语言的关键字还是C中的关键字?2.extern关键字和全局变量3.ChatGpt讲述extern的用法4.extern一般用法4.1.在本模块中使用4.2.跨模块中使用 5.标准定义使用extern关键字的步骤7.ext…

Nginx 访问日志中有 Get 别的网站的请求是什么原因?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言理解 Nginx 访问日…

父亲的打,最让人想念。

11年前的端午节,父亲就走了。 父亲十五岁就外出打工,从小出去打工,吃了没有文化的苦,父亲从小教育我要好好读书,可我从来听不进。 所以我经常挨打。 老家在湖南的一个农村,我父亲十几岁就南下打工&#xff…

[进阶]网络通信:TCP通信,一发一收,多发多收

TCP通信 特点:面向连接、可靠通信。通信双方事先会采用 “三次握手〞 方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。Java提供了一个java.net.socket类来实现TCP通信。 TCP通信——客户端开发 客户端程序就是通过java.…

基于OpenCV-车辆检测项目(简易版)

车辆检测 1.项目介绍2. 读取一段视频3.通过形态学处理识别车辆4.描画轮廓5. 车辆计数并显示 本项目使用的视频地址链接 1.项目介绍 对一个视频进行车辆数量的检测,用到的知识有视频的读取,滤波器,形态学,添加直线、文本&#xff…

黑马头条2

文章目录 前言一、接口工具1.1 postman1.2 swagger1.3 knife4j 二、 网关一、基本搭建二、全局过滤器jwt 三、 前端集成导入前端工程项目安装nginx测试 🌕博客x主页:己不由心王道长🌕! 🌎文章说明:黑马头条开发&#x…

一站式数据可观测性平台 Datavines 正式开源啦

Datavines是一站式开源数据可观测性平台,提供元数据管理、数据概览报告、数据质量管理,数据分布查询、数据趋势洞察等核心能力,致力于帮助用户全面地了解和掌管数据,让您做到心中有数,目前作为 Datavane 开源组织的重点…

Java ForkJoin 简介和应用

Java 并行框架 Fork Join 一.Fork Join 简介1.框架说明2.任务说明 二.应用示例1.RecursiveTask分组示例分组求和 2.RecursiveAction3.CountedCompleter 三.ForkJoin 实践代码测试1.测试用 Excel 文件2.读取结果 一.Fork Join 简介 1.框架说明 ForkJoinPool 继承自 AbstractEx…

【Java-SpringBoot+Vue+MySql】Day4-VUE框架使用

一、VUE入门 1、环境准备 2、预备知识 3、实战演练 vue官网 Vue.js - 渐进式 JavaScript 框架 | Vue.js 基础语法,vue2和vue3区别不大,但是后面路由会有很大区别。 前期基础语法,我们通过链接的方式使用vue,后面会用npm进行安装…

Transformer-XL模型简单介绍

目录 一、前言 二、整体概要 三、细节描述 3.1 状态复用的块级别循环 3.2 相对位置编码 四、论文链接 一、前言 以自注意力机制为核心的 Transformer 模型是各种预训练语言模型中的主要组成部分。自注意力机制能够构建序列中各个元素之间的上下文关联程度,挖掘…