iOS使用Jenkins完成自动化打包

iOS使用Jenkins实现自动化打包并上传蒲公英

一、安装本地Jenkins

1、通过Home brew安装本地Jenkins

brew install Jenkins

没安装Home Brew的可使用命令自行安装

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

2、启动Jenkins

终端输入命令启动Jenkins

jenkins

待Jenkins启动后,浏览器打开:http://localhost:8080/

3、解锁Jenkins

按照提示到文件所在目录并拷贝初始密码,解锁Jenkins。

4、安装插件

安装插件.png

可以选择推荐的插件,也可自行选择插件安装。

5、设置登录账号密码

设置登录账号密码.png

二、配置Jenkins

1、安装插件

到系统管理-->插件管理-->可选插件中,搜索安装以下插件:
Keychains and Provisioning Profiles Management(用来管理本地keychain和iOS证书)
Xcode integration (用于xcode构建)

插件安装.png

搜索安装插件.png

2、配置证书

插件安装完成后,在系统管理中找到刚安装的Keychains and Provisioning Profiles Management插件:

Keychains and Provisioning Profiles Management.png

3、配置login.keychain和描述文件

1、login.keychain文件路径:

~/Library/Keychains

如果该路径下只有login.keychain-db,可以复制出来删除-db。

2、Provisioning Profiles路径一般为:

/User/{用户名}/Library/MobileDevice/Provisioning Profiles

配置证书.png

配置完成后点击Save保存。

三、新建任务

1、创建一个自由风格的任务:

新建任务.png

2、项目配置:

1、丢弃旧的构建(按需填写)

丢弃旧的构建.png

2、源码管理:
源码管理.png

3、构建环境:
构建环境.png

4、增加构建步骤:
可选Xcode编译,也可以选择Shell脚本使用Xcodebuild命令编译,这里只介绍shell脚本的方式:增加构建步骤-->Execute shell

echo "=================1.创建环境及文件路径================="

# $HOME表示 Jenkins 的主目录

# 项目输出路径

OUTPUT_PATH="/Users/guaishou/autopackaging"

echo $OUTPUT_PATH

if [ ! -d $OUTPUT_PATH ]; then

mkdir $OUTPUT_PATH

fi

# 创建当前任务下的 项目文件 环境

# ${JOB_NAME} 当前任务名称

JOB_NAME_PATH="$OUTPUT_PATH/${JOB_NAME}"

echo $JOB_NAME_PATH

if [ ! -d $JOB_NAME_PATH ]; then

mkdir $JOB_NAME_PATH

fi

# 项目工程名

APP_NAME="sudi"

#项目scheme名称,一般跟都是跟APP_NAME是一致的

SCHEME_NAME="jixain" 

# 项目中 Info.plist 的绝对路径

PLIST_PATH="$HOME/jenkins/workspace/${JOB_NAME}/${APP_NAME}/${APP_NAME}/Info.plist"

# 获取项目的版本号、App名称

BUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PLIST_PATH}")
DISPLAY_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleDisplayName" "${PLIST_PATH}")

# ipa存放的路径

IPA_PATH="${JOB_NAME_PATH}/build"

# 创建 ipa 路径文件夹

if [ ! -d $IPA_PATH ];then

echo '文件夹不存在,创建文件夹'

mkdir $IPA_PATH

else

echo '文件夹已存在,删除文件夹内所有文件'

rm -rf $IPA_PATH/*
fi

# archive 文件路径

ARCHIVE_PATH="${IPA_PATH}/${APP_NAME}_${BUILD_ID}.xcarchive"

echo "=================2.进入工程目录================="

cd $HOME/jenkins/workspace/${JOB_NAME}/${APP_NAME}

echo "=================3.清理工程================="

xcodebuild clean -target "${APP_NAME}" -configuration 'Release'

echo "=================4.解锁钥匙串================="

# 这里读取了 Jenkins 下的 Library 中的 Keychains

#如果构建环境配置看keychain,此步骤可省略

 security unlock-keychain -p "电脑登录密码" "${HOME}/Library/Keychains/login.keychain-db"

echo "=================5.打包生成 xcarchive 文件================="

# 这里采用了自动签名的方式,可自行配置 CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE

# 如果是使用了cocopods的workspace,可将 -project 替换为 -workspace , .xcodeproj 替换为 .xcworkspace

xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -scheme "${SCHEME_NAME}" -configuration "Debug" -archivePath "${ARCHIVE_PATH}"

echo "=================6.导出 ipa ================="

# ExportOptions.plist主要是描述了导出的 ipa 使用的相关证书和配置文件

# 不知道怎么填写的自行百度

xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath "${IPA_PATH}" -exportOptionsPlist "${JOB_NAME_PATH}/ExportOptions.plist"

echo "=================7.上传到蒲公英发布平台 ================="
PASSWORD=555555
GIT_MESSAGE=`git log -1 | sed -n '5,$p'`
curl -F "file=@${IPA_PATH}/${SCHEME_NAME}.ipa" \
-F "uKey=你的User Key" \
-F "_api_key=你的Api Key" \
-F "buildInstallType=2" \
-F "buildUpdateDescription=commitId:${GIT_COMMIT}-message:${GIT_MESSAGE}" \
-F "buildPassword=${PASSWORD}" \
https://www.pgyer.com/apiv2/app/upload

echo "=================8.通知企业微信 ================="
CURL_PSOT_DATA="
   {
        \"msgtype\": \"text\",
        \"text\": {
            \"content\" : \"${DISPLAY_NAME}_iOS_${BUNDLE_SHORT_VERSION}构建成功!\n环境:Debug\n下载:蒲公英对应下载地址\n密码:${PASSWORD}\n更新:${GIT_MESSAGE}\"
        }
   }"

curl '企业微信机器人地址' \
   -H 'Content-Type: application/json' \
   -d "$CURL_PSOT_DATA"

关于蒲公英部分和企业微信部分,可以去蒲公英官网和企业微信中查看对应的API。

三、立即构建

立即构建.png

点击立即构建,就可以完成iOS项目的自动构建了。

四、多分支多环境打包配置

1、参数化构建:


参数化构建.png

按照上图方式配置完后,需要在shell脚本中对以下进行修改:

xcodebuild clean -target "${APP_NAME}" -configuration '${bulidEnvironment}'
xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -scheme "${SCHEME_NAME}" -configuration "${bulidEnvironment}" -arch arm64 -archivePath "${ARCHIVE_PATH}"

源码管理里的分支应该填对用的git参数名称:


源码管理.png

配置完成后,立即构建按钮就会变成这样:


构建.png

点进去选择对用的分支和参数进行构建:


多参数构建.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335