Jenkins CI/CD 持续集成专题三 Jenkins 使用shell脚本打包组件配置流程

第一步 新建任务

第二步 输入项目名称和选择自由风格的软件项目点击确定

第三步 配置下项目地址和账号密码

第四步 配置 build steps 选择 shell 脚本 

第五步 shell 配置 (注意shell 必须以#!/bin/sh开头,否则会报 找不到shell 命令的错)

#!/bin/shblack=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
reset=$(tput sgr0)color_cyan="\033[0;36m"
color_red="\033[41;37m"
color_default="\033[0;m"function echo_log() {echo -e "${color_cyan}$*${color_default}"
}function echo_error() {echo -e "${color_red}$*${color_default}"
}RunCommand() {echo_log "-> ♦♦♦♦♦ $* ♦♦♦♦♦<-""$@"return $?
}function delete_white_space() {echo -n  "$1" | sed  's/^[ t]*//;s/[ t]*$//'
}
function log_separator() {echo_log "----------------------------执行新的任务------------------------------"
}Root=`pwd`
basedir=`cd $(dirname $0); pwd -P`
#current_file="${basedir##*/}"
current_file="AliMobileOneLogin"
RepoName='dp_base_ios_spec'
SpecName=$current_file'.podspec'
SpecPath=$Root/$SpecName
spec_sources='https://cdn.cocoapods.org/'# 自增,满10进1increment_version () {declare -a part=( ${1//\./ } )declare    newdeclare -i carry=1for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 )); dolen=${#part[CNTR]}new=$((part[CNTR]+carry))[ ${#new} -gt $len ] && carry=1 || carry=0[ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new}donenew="${part[*]}"echo  "${new// /.}"}#验证版本号格式verify_input_tag_format(){local tag_version=$1if [ -z $tag_version ]; thenecho ${red}"请输入正确的tag 版本号,例如:0.0.1 / 1.0.0 / 1.0.0-bate1"${reset}exit 1else# release的正则reg='^[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}.*$'# reg='^(0|[1-9][1-9]*)\.(0|[1-9][1-9]*)\.(0|[1-9][1-9]*)(?:-((?:0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'if [[ "$tag_version" =~ $reg ]]; thenecho ${blue}"tag版本号正确,格式验证通过"${reset}elseecho ${red}"请输入正确的tag 版本号,例如:0.0.1 / 1.0.0 / 1.0.0-bate1"${reset}exit 1fifi}#验证版本号是否存在verify_input_tag_exist(){local tag_version=$1touch .tag_list_filetempListFilePath=$Root/.tag_list_fileecho ${blue}"1========================================================="${tempListFilePath}git fetch --tagsgit tag -l |sort -r > $tempListFilePathexist="0"while read linedotag_number=$lineecho ${blue}"2========================================================="${tag_number}echo ${yellow}"3========================================================="${tempListFilePath}if [[ $tag_number == $tag_version ]]; thenexist="1"breakfidone < $tempListFilePathif [[ $exist == "1" ]]; thenecho ${red}"tag版本号 ${tag_version} 已经存在,请重新执行!"${reset}exit 1elseecho ${blue}"tag版本号正确,格式验证通过"${reset}firm $tempListFilePath 2> /dev/null}#    #修改podspec文件版本号
#    change_spec_version()
#    {
#        local tag_version=$1
#        while read line
#        do
#            reg="^s.version"
#            if [[ "$line" =~ $reg ]]; then
#                sed -i "" "s/${line}/s.version        = \'$tag_version\'/g" $SpecPath
#            fi
#        done < $SpecPath
#        cat $SpecPath
#    }#修改podspec文件版本号
function change_spec_version()
{local tag_version=$1local specPath=$2echo_log "podspec路径$specPath"echo_log "要修改的版本号$tag_version"while read linedoreg="^s.version"if [[ "$line" =~ $reg ]]; thensed -i "" "s/${line}/s.version        = \'$tag_version\'/g" $specPathfidone < $specPathcat $specPath
}#提交git及打tagfunction update_git_tags(){RunCommand cd $1if [ -n "$(git status -s)" ];thenRunCommand git add -A && git commit -m "$new_tag_version"if [[ $? -ne 0 ]]; thenecho_error "'git add -A && git commit -m' failed,请检查错误信息 $1"exit 1fiRunCommand git tag $new_tag_versionRunCommand git push origin --tags && git push origin masterRunCommand git fetch --allif [[ $? -ne 0 ]]; thenecho_error "'git push origin' failed,请检查错误信息 $1"exit 1fi
elseecho_error "似乎有异常,Git没有变更的内容  $1"exit 1
fi}
#拷贝打包完的frameworke文件到指定路径下copy_framework_to_target_file(){echo ${green}"====================== 开始拷贝文件 ===================="${reset}local tag_version=$1#目标地址target_file_Path=$Root'/Frameworks'#拷贝地址file_Path=${Root}'/'$current_file'-'${tag_version}copy_Path=${file_Path}'/ios'if [ ! -d  "$target_file_Path" ]; thenmkdir  $target_file_Pathecho ${green}"========================创建文件夹成功================================="${reset}elseecho ${green}"========================文件夹已经存在================================="${reset}fiecho ${green}"====================== 生成的文件路径$copy_Path ===================="${reset}echo ${green}"====================== 要拷贝的目标文件路径 $target_file_Path===================="${reset}# 拷贝生成的framework文件到目标文件cp  -rf  $copy_Path/*  $target_file_Path/#删除自动生成的framework文件目录rm -rf $file_Path}#------------------- 脚本开始 --------------------echo ${green}"========================================================="${reset}echo ${green}"====================== 开始发布组件 ======================="${reset}echo ${green}"========================================================="${reset}echo $current_file## >-------------------------开始编译处理-------------------------------------------<
echo_log ">>>打印路径"RunCommand cd $Root
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
last_commit=$(git log --pretty=format:'%h %s (%an, %ar)' -n 5 | tr '\n' ' ';)
echo_log "最近一次提交记录:$last_commit"## >----------------------------------更新Git Tag版本号 spec索引库处理----------------------------------log_separator
echo_log "更新git tags版本号 spec索引库处理"old_tag_version="1.0.0"RunCommand git describe --tags `git rev-list --tags --max-count=1`#TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
#
# echo $TAGif [[ $? -ne 0 ]]; thenecho_log "当前仓库没有git --tags,就使用默认的初始版本号 1.0.0"
elseold_tag_version="$(git describe --tags `git rev-list --tags --max-count=1`)"
fi
echo_log "当前版最新tag为:$old_tag_version"prebetal=`echo $old_tag_version | cut -d '-' -f 1`
new_tag_version="$(increment_version $prebetal)"
echo_log "当前组件版本号:${old_tag_version} 新的版本号:${new_tag_version}"change_spec_version $new_tag_version $SpecPathRunCommand update_git_tags $Root#------------------- 版本号输入和校验 --------------------
#verify_input_tag_format $TagVersion
#verify_input_tag_exist $TagVersion
#change_spec_version $TagVersionTagVersion=$new_tag_versionecho ${green}"RepoNameRepoName===========${RepoName}=============================================="${reset}echo ${green}"SpecPathSpecPath===========${RepoName}===================${SpecPath}==========================="${reset}pod lib lint --sources=${spec_sources}  --use-libraries --allow-warnings --no-cleanif [[ $? != 0 ]]; thengit push origin --delete $TagVersiongit tag -d $TagVersionecho ${red}"本地校验失败"${reset}exit 1elseecho ${red}"本地校验成功"${reset}fipod lib lint --sources=${spec_sources}  --use-libraries --allow-warnings --no-cleanif [[ $? != 0 ]]; thengit push origin --delete $TagVersiongit tag -d $TagVersionecho ${red}"远程校验失败"${reset}exit 2elseecho ${red}"远程校验成功"${reset}fi#   pod repo push ${RepoName} 'CommonUtil.podspec' --sources=${spec_sources} --allow-warnings --verbose --use-libraries --skip-import-validation --skip-tests
#    if [[ $? != 0 ]]; then
#        git push origin --delete $TagVersion
#        git tag -d $TagVersion
#        echo ${red}"repo push 失败"${reset}
#        exit 3
#     else
#         echo ${red}"repo push成功"${reset}
#    fiecho ${green}"========================================================="${reset}
echo ${green}"====================== 开始打包framework ===================="${reset}
echo ${green}"========================================================="${reset}pod package ${SpecName}  --force --exclude-deps --no-mangle --spec-sources=${spec_sources}copy_framework_to_target_file  $TagVersionecho ${green}"========================================================="${reset}echo ${green}"====================== 打包framework完成 ===================="${reset}echo ${green}"========================================================="${reset}git add .git commit -m "发布组件打包framework:$TagVersion"git pushgit tag -d "$TagVersion"git push origin --delete tag "$TagVersion"git tag -a $TagVersion -m "$TagVersion"git push origin $TagVersionecho ${green}"========================================================="${reset}
echo ${green}"====================== 组件发布完成 ======================="${reset}
echo ${green}"========================================================="${reset}#pod package AliMobileOneLogin.podspec  --force –embedded  --exclude-deps --no-mangle --spec-sources=https://cdn.cocoapods.org/

第六步 点击立即构建 在构建历史里面查看构建日志

第六步 查看编译状态和产物

到这里,jenkins 配置shell脚本打包组件的完整配置流程就已经完成

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

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

相关文章

【Web】DASCTF X CBCTF 2022九月挑战赛 题解

目录 dino3d Text Reverser cbshop zzz_again dino3d 进来是一个js小游戏 先随便玩一下&#xff0c;显示要玩够1000000分 直接console改分数会被检测 先是JSFinder扫一下&#xff0c;扫出了check.php 到js里关键词索引搜索check.php 搜索sn&#xff0c;发现传入的参数是…

3-羟基丙酸(3-HP)应用前景广阔 生物基3-羟基丙酸市场占比将不断提升

3-羟基丙酸&#xff08;3-HP&#xff09;应用前景广阔 生物基3-羟基丙酸市场占比将不断提升 合成技术是制约3-羟基丙酸规模化应用的重要因素。3-羟基丙酸合成技术包括化学合成法、生物合成法两大类&#xff0c;其中化学合成法是主流生产工艺&#xff0c;但化学合成法存在工艺复…

.netcore+vue新生分班系统的设计与实现

.netcore vue新生分班系统的设计与实现说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于.net core架构和mysql数据库vue 东北石油大学新生分班系统的设计与实现 功能模块&#xff1a; 登录 注册学生 忘记密码 系统首顶 个…

完成学校官网页面制作

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>教务系统</title> <style> .wap{ margin:0 auto; width:955px; } .top{ height:150px; padding-left:85px; …

DHCP服务器配置故障转移后显示红色箭头、与伙伴服务器失去联系的解决方案

一、遇到的故障现象&#xff1a; &#xff08;主DHCP服务器与备用DHCP服务器连通性正常&#xff0c;在故障转移选项卡上却显示与伙伴失去联系、伙伴关闭&#xff0c;且ipv4协议旁边显示一个红色的小箭头&#xff09;&#xff0c;正常情况下是绿色 &#xff08;一&#xff09;…

外包干了6天,技术明显退步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年3月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

金三银四面试题(二十):单例模式知多少?

设计模式也是面试中的热门考题&#xff0c;基本这个部分都是问问你知不知道XXX设计模式&#xff0c;有什么用&#xff0c;优缺点&#xff0c;然后再现场手写一个demo。很多时候是和spring一起考的&#xff0c;问问你知不知道spring框架用了哪些设计模式。今天我们来先看看单例模…

代码+视频,R语言对数据进行多重插补后回归分析

我们在临床做回顾性研究分析中经常要面对数据缺失的问题&#xff0c;如果数据缺失量大就会对我们的研究结果产生影响&#xff0c;近年来&#xff0c;对数据进行多重插补广泛应用于SCI论文中。我们在之前的文章中已经演示了使用SPSS对数据进行多重插补并分析。今天&#xff0c;我…

贪吃蛇的简单实现(c语言)

前言&#xff1a;学完了C语言的基础语法&#xff0c;和一点数据结构的知识&#xff0c;拿贪吃蛇来练练手&#xff0c;并熟悉以前的知识。写完之后&#xff0c;有一种成就感&#xff0c;为以后的学习饱满激情。 注意这里的讲解是由部分到整体的思路。 目录 控制台不能是终端&am…

ubuntu环境下使用g++把c++编译成汇编语言(暂时)

1. 引言 为了深入理解c&#xff0c;决定学习一些简单的汇编语言。使用ubuntu系统下g很容易将一个c的文件编译成汇编语言。本文使用此方法&#xff0c;对一个简单的c文件编译成汇编语言进行理解。 2.示例 文件名&#xff1a;reorder_demo.cpp #include<stdio.h>typede…

逻辑回归+分类的评估方式

一&#xff1a;什么是逻辑回归 解决二分类问题 二&#xff1a;损失及优化 三&#xff1a;逻辑回归API 四&#xff1a;案例 五&#xff1a;分类的评估方式 评估公式 分类评估API ROC与AUC&#xff08;介绍API&#xff09;衡量不平衡样本 ROC曲线的绘制 分类中解决类别不平衡

HackmyVM-----Boxing靶机

文章目录 正常打靶流程1.获取靶机IP地址2.获取靶机端口服务3.访问网页4.添加域名WindowsLinux 5.访问域名6.nc反弹shell 7.结束 正常打靶流程 1.获取靶机IP地址 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:10:3c:9b, …

Drive Scope for Mac:硬盘健康监测分析工具

Drive Scope for Mac是一款专为Mac用户设计的硬盘健康监测与分析工具&#xff0c;致力于保障用户的数据安全。这款软件功能强大且操作简便&#xff0c;能够实时检测硬盘的各项指标&#xff0c;帮助用户及时发现并解决潜在问题。 Drive Scope for Mac 1.2.23注册激活版下载 Driv…

linux 驱动-匹配2 (amba_bustype)

目录 1.实例分析 a. 设备树实例 b. 驱动实例 2. amba匹配流程 a. 创建amba_device b. 确定总线以及总线的匹配函数 c. 分析总线的匹配函数 1.实例分析 a. 设备树实例 serial7e201000 { compatible "brcm,bcm2835-pl011\0arm,pl011\0arm,primecell"; //创建am…

用Python自动化操作PPT,看完这篇文章就够了!

1.PPT自动化能干什么&#xff1f;有什么优势&#xff1f; 它可以代替你自动制作PPT它可以减少你调整用于调整PPT格式的时间它可以让数据报告风格一致总之就是&#xff1a;它能提高你的工作效率&#xff01;让你有更多时间去做其他事情&#xff01; 2.使用win32com操作ppt 官…

【探索Linux】P.32(自定义协议)

阅读导航 引言一、自定义协议概念二、自定义协议需要注意的事项三、自定义协议示例(跨网络计算器协议)✅协议代码&#xff08;Protocol.hpp&#xff09;1. 计算器协议简单介绍2. 序列化部分3. 反序列化部分4. 请求和响应数据结构5. 使用自定义协议 四、总结温馨提示 引言 在上…

Rust Tracing 入门

Tracing 是一个强大的工具&#xff0c;开发人员可以使用它来了解代码的行为、识别性能瓶颈和调试问题。 Rust 是一种以其性能和安全保证而闻名的语言&#xff0c;在它的世界中&#xff0c;跟踪在确保应用程序平稳高效运行方面发挥着至关重要的作用。 在本文中探讨Tracing 的概…

C++ 初识模板

目录 0.前言 1.泛型编程 2.函数模板 2.1概念 2.2格式 2.3原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式实例化 2.5模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 4.结语 &#xff08;图像由AI生成&#xff09; 0.前言 在 C 中&a…

Unity3D 爆火的休闲益智游戏工程源码/3D资源 大合集

Unity3D休闲益智游戏工程源码大合集 一、关卡类游戏工程源码二、跑酷类游戏工程源码三、消除合成类游戏工程源码四、棋牌类游戏工程源码五、RPG(角色扮演)类游戏工程源码六、FPS&#xff08;射击&#xff09;类游戏工程源码十、Unity3D工艺仿真六、Unity游戏资源1、Unity3D 吃鸡…

Redis数据类型——String

Redis官网指令文档&#xff1a;Commands | Docs 前言 此处的String类型是针对Redis的Value的&#xff0c;因为Key的形式都是String&#xff0c;而Value则有哈性、列表、集合等形式。 众所周知&#xff0c;由于不同编码&#xff0c;经常会出现乱码的问题&#xff0c;但在Redi…