jenkins自动打包

安装, 下文安装步骤写的十分详细,请看完之后再继续阅读下面的文章, 下面是我自己在集成过程中遇到的一些问题和注意事项,供大家参考.

安装步骤

构建的shell脚本的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 工程名
APP_NAME="Eschool"
# 证书
CODE_SIGN_DISTRIBUTION="iPhone Developer: hubei boc (72GBESFWR9)"
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"

#工程名 + 版本号 + 时间 的命名方式
#IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#名字写死
IPANAME="test.ipa"

#要上传的ipa文件路径
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt

#//下面2行是没有Cocopods的用法
#echo "=================clean================="
#xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean

#echo "+++++++++++++++++build+++++++++++++++++"
#xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

#//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}"  -configuration 'Release' clean

echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o /Users/bochb/www/"${IPANAME}"

Jenkins无法启动:

端口号8080被占用

解决办法:

重启电脑或者更改端口号

错误总结

一.错误描述

1
2
3
4
5
6
7
+ xcrun -sdk iphoneos PackageApplication ./Release-iphoneos/Eschool.app -o /Users/bochb/Eschool_V100.100.100_20180519.ipa
2018-05-19 17:46:25.360 xcodebuild[23570:181995] [MT] DVTPlugInManager: Required plug-in compatibility UUID B395D63E-9166-4CD6-9287-6889D507AD6A for KSImageNamed.ideplugin (com.ksuther.KSImageNamed) not present
2018-05-19 17:46:25.452 xcodebuild[23570:181995] [MT] PluginLoading: Required plug-in compatibility UUID B395D63E-9166-4CD6-9287-6889D507AD6A for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs
2018-05-19 17:46:25.453 xcodebuild[23570:181995] [MT] PluginLoading: Required plug-in compatibility UUID B395D63E-9166-4CD6-9287-6889D507AD6A for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Backlight.xcplugin' not present in DVTPlugInCompatibilityUUIDs
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
Build step '执行 shell' marked build as failure
Finished: FAILURE

错误原因:

xcode更新或者安装多个xcode导致插件的UUID没有更新的缘故.

解决办法:

步骤一: 打开终端,输入以下,获取DVTPlugInCompatibilityUUID:结果是一串字符 结构为 8A66E736-A720-4B3C-92F1-33D9962C69DF

defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

步骤二:根据提示信息的路径, 找到插件的目录, 然后更改info.plist文件

根据提示路径 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin 找到 VVDocumenter-Xcode.xcplugin 这个插件, 其实所有插件都在 ` ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ 这个目录下. 右键 VVDocumenter-Xcode.xcplugin, 显示包内容, 打开 info.plist 文件, 将步骤一中的uuid粘贴到 DVTPlugInCompatibilityUUIDs` 这个数组中

步骤三: 重复步骤二的内容, 替换掉所有报错的插件.

二.错误描述

1
2
3
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH

错误原因

Xcode升级到8.3后会缺少 PackageApplication 文件

解决办法:

先去找个旧版的Xcode里面copy一份过来

放到下面这个目录:

1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

然后执行命令, 添加权限

1
sudo chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

jenkins忘记密码无法登陆

打开jenkins的配置文件, 路径 /Users/bochb/.jenkins/config.xml 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
  <disabledAdministrativeMonitors/>
  <version>2.122</version>
  <installStateName>RUNNING</installStateName>
  <numExecutors>2</numExecutors>
  <mode>NORMAL</mode>
  <useSecurity>true</useSecurity>
  <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
    <denyAnonymousReadAccess>true</denyAnonymousReadAccess>
  </authorizationStrategy>
  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
    <disableSignup>true</disableSignup>
    <enableCaptcha>false</enableCaptcha>
  </securityRealm>
  <disableRememberMe>false</disableRememberMe>
  <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
  <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
  <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
  <jdks/>
  <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
  <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
  <clouds/>
  <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
  <views>
    <hudson.model.AllView>
      <owner class="hudson" reference="../../.."/>
      <name>all</name>
      <filterExecutors>false</filterExecutors>
      <filterQueue>false</filterQueue>
      <properties class="hudson.model.View$PropertyList"/>
    </hudson.model.AllView>
  </views>
  <primaryView>all</primaryView>
  <slaveAgentPort>-1</slaveAgentPort>
  <disabledAgentProtocols>
    <string>JNLP-connect</string>
    <string>JNLP2-connect</string>
  </disabledAgentProtocols>
  <label></label>
  <crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
  </crumbIssuer>
  <nodeProperties/>
  <globalNodeProperties/>
</hudson>

删掉里面的如下片段,然后重启jenkins:

1
2
3
4
5
6
7
8
<useSecurity>true</useSecurity>
  <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
    <denyAnonymousReadAccess>true</denyAnonymousReadAccess>
  </authorizationStrategy>
  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
    <disableSignup>true</disableSignup>
    <enableCaptcha>false</enableCaptcha>
  </securityRealm>

jenkins打包出现错误的常见原因

一般来说如果jenkins编译出现错误, 那么自己的xcode打包IPA的编译过程也会有问题, 所以使用jenkins前最好先确保自己再xcode中打包没有问题.

jenkins工作步骤

一、Jenkins构建步骤为: 先集成被依赖的一方的,再集成依赖的一方(如果有依赖)。

1、从SVN上当下最新代码

2、下载资源并编译(比如Pods或者Maven)

3、将编译测试好的内容放到jenkins的工作空间下

4、部署

5、打包

6、将IPA包部署到服务器上(我用的是Apache)。