Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir

打开终端:

1 : 安装jenkins (当前2.183 版本)

brew install jenkins

提示更新
jenkins: Java 1.8 is required to install this formula. Install AdoptOpenJDK 8 with Homebrew Cask: brew cask install homebrew/cask-versions/adoptopenjdk8 Error: An unsatisfied requirement failed this build.
根据提示更新:

brew cask install homebrew/cask-versions/adoptopenjdk8

Updating Homebrew...

重新安装jenkins

brew install jenkins

然后执行war包(更换对应的版本号2.183)

java -jar /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war --httpPort=8080

java更新
Jenkins requires Java versions [8, 11] but you are running with Java 9 from /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home java.lang.UnsupportedClassVersionError: 53.0 at Main.verifyJavaVersion(Main.java:174) at Main.main(Main.java:142)

提示要求是java版本8 ,11 .
更新java (当前11)

brew cask install java11

重新执行war包(更换对应的版本号2.183)

java -jar /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war --httpPort=8080

如果java版本过高,删除高版本(不知道还有没有别的办法)
Jenkins requires Java versions [8, 11] but you are running with Java 12 from /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home java.lang.UnsupportedClassVersionError: 56.0 at Main.verifyJavaVersion(Main.java:174) at Main.main(Main.java:142)
查看java版本

ls /Library/Java/JavaVirtualMachines/

adoptopenjdk-8.jdk jdk-9.0.4.jdk openjdk-11.0.2.jdk openjdk-12.0.1.jdk
删除9.0版本
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk

删除12.0版本
sudo rm -rf /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk

ls /Library/Java/JavaVirtualMachines/
adoptopenjdk-8.jdk openjdk-11.0.2.jdk

重新执行war包
java -jar /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war --httpPort=8080

下面信息提示启动成功:

Running from: /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war
hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
2019-07-09 03:07:09.684+0000 [id=49]    INFO    hudson.model.AsyncPeriodicWork$1#run: Finished Download metadata. 21,767 ms

查看文件路径 /Library/LaunchDaemons 下是否有org.jenkins-ci.plist 文件,没有就创建:




  
    StandardOutPath
    /var/log/jenkins/jenkins.log
    StandardErrorPath
    /var/log/jenkins/jenkins.log
    EnvironmentVariables
    
      JENKINS_HOME
      /Users/xxx/Jenkins/Home
    
    GroupName
    daemon
    KeepAlive
    
    Label
    org.jenkins-ci
    ProgramArguments
    
      /bin/bash
      /Library/Application Support/Jenkins/jenkins-runner.sh
    
    RunAtLoad
    
    UserName
    jenkins
    SessionCreate
    
  

Jenkins安装时会启动创建名为jenkins的用户,
修改文件:/Library/LaunchDaemons/org.jenkins-ci.plist

里面的GroupName和UserName,
可以将该文件cp到另一个路径修改后再覆盖过来,
然后重启Jenkins(brew services restart Jenkins)即可。


3 :打开网址

http://localhost:8080/

如果已经安装过的,提示登录: 如果第一次安装会提示设置账户密码


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第1张图片
图片.png

根据安装日志显示/Users/{你的电脑名}/.jenkins/
安装地址:
/Users/niexiaobo/.jenkins/

初始密码:

(网上说)在本地文件夹前往/Users/Shared/Jenkins/Home/secrets/initialAdminPassword路径,需要更改secrets文件夹的everyone的权限后,打开initialAdminPassword文件,复制出密码,粘贴到网页的输入框中。

(本人没找到[由于电脑以前安装过Jenkins,可能有些步骤没有],所以暂时使用下面免密登录)

免密登录:

修改 config.xml 设置
/Users/niexiaobo/.jenkins/config.xml 文件中
true 修改为false ,
然后终端重启:

brew services restart Jenkins

也可以通过打开地址
http://localhost:8080/restart 重启

首次安装会有个安装过程:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第2张图片
图片.png

创建用户/密码:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第3张图片
图片.png
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第4张图片
图片.png

点击即可开始创建新的项目:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第5张图片
图片.png

4 :创建新的项目之前,需要先安装一个nodejs插件:

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第6张图片
图片.png

往下滚动找到插件管理:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第7张图片
图片.png

安装里搜索nodejs,然后点击按钮,立即生效:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第8张图片
图片.png

创建新的项目,开始配置:

下面以github上建立一个测试项目示范:

前置工作:
登录github - > 创建一个项目 -> 上传helloA项目 -> 复制git路径

5 : 开始配置iOS项目:

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第9张图片
图片.png
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第10张图片
图片.png
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第11张图片
图片.png

构建触发器模块,可根据需要选择性勾选Build periodically选项,即按照预先设定的时间自动化构建。

定时器构建语法

* * * * *
星号中间用 空格 隔开

第一个表示分钟,取值0~59
第二个
表示小时,取值0~23
第三个表示一个月的第几天,取值1~31
第四个
表示第几月,取值1~12
第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

用法举例:

每30分钟构建一次:H代表形参
H/30 * * * *

每2个小时构建一次:
H H/2 * * *

每天的8点,12点,22点,一天构建3次: (多个时间点中间用逗号隔开)
0 8,12,22 * * *

每天早上8点到晚上6点每三小时检查一次
H 8-18/3 * * *

Build periodically(定时构建):周期进行项目构建(它不care源码是否发生变化)
Poll SCM(轮训 SCM):定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第12张图片
图片.png
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第13张图片
图片.png
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第14张图片
图片.png

shell脚本:

# !/bin/bash -ex
# export LANG=en_US.UTF-8
# 工作空间位置
WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"
# 切换到工程目录
cd ${WORKSPACE}/${platforms}/${ProjectName}
# 打开钥匙串
security unlock-keychain -p ${password} ~/Library/Keychains/login.keychain
# pastry命令行将外层的 www 目录 合并到 平台内的 www 目录
# /Users/Shared/Jenkins/Documents/pastry/bin/pastry bake cordova prepare ${platforms}
# 配置 版本号
buildNumber="Jenkins:${BUILD_NUMBER} svn:${SVN_REVISION}"
# 获取配置文件地址
PROJECT_INFOLIST="${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}/Info.plist"
# 修改配置文件 的 版本号
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${buildNumber}" "${PROJECT_INFOLIST}"
# 编译(单工程用-target,多工程用-workspace)

packageOut="${WORKSPACE}/package_Out"

#执行 (生成.xcarchive文件)
xcodebuild archive -scheme "${ProjectName}" -configuration "Release" -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive"
#导出ipa
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}"

6 : 保存完成后,在首页项目中就可以进行:

6.1 创建工程项目helloA

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第15张图片
图片.png

xcode工具打开,设置开发者信息,编译成功 , 将项目上传到git云端


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第16张图片
图片.png

进入Jenkins首页,可点击项目右侧按钮手动执行:

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第17张图片
图片.png

点击上面项目artABC进入:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第18张图片
图片.png

点击某一次编译,可查看编译日志等等:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第19张图片
图片.png

7 关于上面shell脚本:

下面了解如何使用命令进行打包:

7.1 新版本xcode 打包 xcodebuild -exportArchive 命令

下面在
终端窗口,cd 命令进入项目路径, 再进行操作

cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA

(1)执行 xcodebuild clean 进行清除

(2)执行 (生成.xcarchive文件)

xcodebuild archive -scheme "helloA" -configuration "Release" -archivePath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/1.xcarchive"
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第20张图片
终端命令:生成.xcarchive文件

(3)添加ExportOptions.plist文件到某个路径
一般我们通过xcode打包有几种打包选项:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第21张图片
图片.png

最后当我们导出文件时,会包含以下4种文件


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第22张图片
图片.png

其中ExportOptions.plist文件就包含了导出ipa文件的一些设置:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第23张图片
图片.png

(4)导出包 格式://xxx.plist代表指定的exportOptionsPlist文件;
xcodebuild -exportArchive -archivePath xxx.xcarchive -exportOptionsPlist xxx.plist -exportPath ./Product
(如果项目没用选择Profile, 需要添加-exportProvisioningProfile 参数)

命令示例:

xcodebuild -exportArchive -archivePath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/1.xcarchive" -exportOptionsPlist "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/ExportOptions.plist" -exportPath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/helloAipa"
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第24张图片
终端命令:导出包
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第25张图片
文件显示

7.2 xcode 旧版本 打包 命令

进入项目路径

cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA

(1) 编译项目(工程目录下会多出一个 build 文件夹)

xcodebuild -project helloA.xcodeproj -target helloA -configuration Release

(2) PackageApplication命令:

 Xcode升级到8.3后(8.3以下直接最后一步打包) 用PackageApplication命令进行打包 提示下面这个错误
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH

PackageApplication下载地址:
链接: https://pan.baidu.com/s/14LYFvPQb6YJKL0Iy1Kzreg 提取码: br8v 

解压后存到下面目录下:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

然后执行:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/

然后执行PackageApplication:
chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

(3) 最后进行打包

xcrun -sdk iphoneos PackageApplication -v /Users/niexiaobo/.jenkins/workspace/artABC/helloA/build/Release-iphoneos/helloA.app -o /Users/niexiaobo/.jenkins/workspace/package_Out/helloA_3.ipa

8 : 打包使用CocoaPods项目时

(8.2) 首先安装CocoaPods环境

1 安装CocoaPods环境
2 pod init //生成 podfile
3 编辑podfile文件
比如添加 : pod 'Reachability', '~> 3.0.0'
4 安装

pod install
或者:
pod install --verbose --no-repo-update

5 最后会生成helloA.xcworkspace 文件, 也是以后项目启动文件

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第26张图片
图片.png

(8.2) 然后在.git位置添加忽略文件.gitignore, 然后提交项目到git云端
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第27张图片
图片.png

内容:

#CocoaPods
Pods/

# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

# Mac OS X Finder and whatnot
.DS_Store

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xcuserstate
*.xccheckout

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

这时候如果直接在Jenkins上打包会报错, 拉下来的代码会依然运行helloA.xcodeproj文件, 自然编译就会报错.

(8.2) 添加插件

下载
需要下载两个插件:token-macro.hpi和xcode-plugin.hpi,
https://updates.jenkins-ci.org/download/plugins/token-macro/
https://updates.jenkins-ci.org/download/plugins/xcode-plugin/

在jenkins安装插件位置:
jenkins->系统管理(Manage Jenkins)->管理插件(Manage plugin)->高级advance->上传插件.

先上传安装token-macro.hpi,再上传安装code-plugin.hpi,安装完后重启(http://localhost:8080/restart),即可在构建中看到xcode选项。

上传插件
进入Manage Jenkins 菜单

进入管理插件栏:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第28张图片
图片.png

找到上传插件:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第29张图片
图片.png

先上传安装token-macro.hpi,再上传安装code-plugin.hpi,

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第30张图片
图片.png

安装完后重启
http://localhost:8080/restart

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第31张图片
图片.png

(8.3) 配置shell脚本

修改脚本:
(1)由于pod相关文件均被git忽略,clone下来后需要update一下
(2)pod管理使用的是.xcworkspace文件,打包命令需要指定文件

#!/bin/sh

WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"


# 切换到工程目录
cd ${WORKSPACE}/${platforms}/${ProjectName}

# 打开钥匙串
security unlock-keychain -p ${password} ~/Library/Keychains/login.keychain
# pastry命令行将外层的 www 目录 合并到 平台内的 www 目录
# /Users/Shared/Jenkins/Documents/pastry/bin/pastry bake cordova prepare ${platforms}
# 配置 版本号
buildNumber="Jenkins:${BUILD_NUMBER} svn:${SVN_REVISION}"

echo "版本号:${BUILD_NUMBER}"

# 获取配置文件地址
PROJECT_INFOLIST="${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}/Info.plist"

echo "配置文件地址${PROJECT_INFOLIST}"


# 修改配置文件 的 版本号
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${buildNumber}" "${PROJECT_INFOLIST}"

packageOut="${WORKSPACE}/package_Out"

#  检查pod更新
pod install --verbose --no-repo-update

#  clean 项目:
xcodebuild -workspace "${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}.xcworkspace" -scheme "${ProjectName}" -configuration "Release" clean

# 生成archive 文件:
xcodebuild archive -workspace "${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}.xcworkspace" -scheme "${ProjectName}" -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -configuration "Release"  


# 导出ipa文件:
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}" -allowProvisioningUpdates


保存,编译

(8.4)当然不使用shell脚本也行, 如下步骤配置:

进入项目-配置configure->删除execute shell
点击- 导出IPAexport IPA :

/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/
ad-hoc
helloA${BUILD_DATE}
/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/export/2/

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第32张图片
图片.png

在Keychain path那里填写${HOME}/Library/Keychains/login.keychain


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第33张图片
图片.png

helloA
/Users/niexiaobo/.jenkins/workspace/artABC/helloA/helloA
/Users/niexiaobo/.jenkins/workspace/artABC/helloA/

Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第34张图片
图片.png

配置完成后保存.

然后回到项目编译.


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第35张图片
图片.png

9 : 打包上传到fir

9.1 通过shell上传

(1)安装插件 (需要插件支持才能上传)

打开Mac 终端,输入命令:

 sudo gem install fir-cli

安装成功:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第36张图片
图片.png
(2) 获取token (需要校验,相当于登录账户密码)

安装完插件后, 登录fir, 移动到右上角账号,选择api token :


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第37张图片
图片.png

生成token


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第38张图片
图片.png
(2) 修改已经配置的 shell脚本

假设上面生成的token是 1234567894567890
在脚本最后添加一行:

#!/bin/sh

WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"

.....
.....
.....

# 导出ipa文件:
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}" -allowProvisioningUpdates

#上传ipa文件到fir (发布App Store的包不允许)
fir publish "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}/${ProjectName}.ipa" -T "1234567894567890" -c "Uploaded by fir-jenkins plugin"

现在可以构建代码了.

构建完成后fir下载地址:


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第39张图片
图片.png

9.2 通过Jenkins 插件上传

(1)下载插件

-> fir 插件下载地址

(2)安装插件

在jenkins安装插件位置:
jenkins->系统管理(Manage Jenkins)->管理插件(Manage plugin)->高级advance->上传fir-plugin.hpi插件.

(3)编辑配置:添加构建事件- > 上传到fir
Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第40张图片
图片.png

添加token , ipa包的文件夹路径(最后没有斜杠"/" )


Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir_第41张图片
图片.png

保存后构建项目即可.

-------end---------

你可能感兴趣的:(Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir)