安裝jenkins
java環(huán)境準(zhǔn)備
jenkins主要依賴的java環(huán)境 所以確保電腦中java環(huán)境準(zhǔn)確就緒支撐軟件檢測(cè)是否已經(jīng)部署了java環(huán)境在終端輸入
$ java –version
如果出現(xiàn)類似于如下的字樣 則標(biāo)識(shí)您已經(jīng)安裝了java環(huán)境
$ java version "1.8.0_77"
若出現(xiàn)如下
$ -bash: java: command not found
則表示沒有安裝java環(huán)境 則需要下載java安裝下載地址 (1.8版本,后續(xù)下載版本下載地址可能會(huì)有變化)jre 1.8 下載安裝后重復(fù)上述步驟 確保java環(huán)境成功搭建
在mac上安裝jenkins
- 安裝HomeBrew
jenkins依賴HomeBrew包管理,所以我們要先安裝homebrew,
若已安裝則跳轉(zhuǎn),查看方法
$ brew -v
若正確顯示版本信息則代表安裝成功安裝homebrew(參考網(wǎng)站)安裝完成之后
homebrew的源在國(guó)外,所以我們需要配置一下使之下載的快一點(diǎn)參考網(wǎng)站 http://ban.ninja
在終端中輸入
$ vim ~/.bash_rc
在文件最后一行 添加七牛cdn加速
$ export HOMEBREW_BOTTLE_DOMAIN=http://7xkcej.dl1.z0.glb.clouddn.com
注:以上工作都是前期準(zhǔn)備,因?yàn)榇蟛糠职芾?包括brew和gem)的源都在國(guó)外,所以可能下載速度會(huì)很感人
- 開始安裝jenkins
在終端輸入
$ brew install jenkins
根據(jù)提示操作即可完成 大概需要不到5分鐘(排除網(wǎng)絡(luò)原因)
至此,jenkins環(huán)境搭建成功
安裝fastlane和fir-CLI
fastlane和fir-CLI工具介紹
fastlane 和fir-CLI是一組工具套件,旨在實(shí)現(xiàn)iOS應(yīng)用發(fā)布的自動(dòng)化,并且提供一個(gè)良好的持續(xù)集成和部署流程,只需要一個(gè)點(diǎn)擊或者一個(gè)命令就可以觸發(fā)這個(gè)流程
shenzhen已經(jīng)由一年
以上沒有更新了,很多功能都并不是很好用了,所以在這里我們才會(huì)安裝fastlane這個(gè)工具,截止到2016年07月,fastlane工具還是可以上傳到itc的
rubygems環(huán)境搭建
fastlane 和 shenzhen都是ruby編寫的 所以要用到gem安裝
查看當(dāng)前的ruby版本
$ ruby –v
若輸出
$ ruby x.x.x
代表ruby gem安裝成功已經(jīng)安裝,若沒有安裝rubygems 可以利用我們剛剛搭建好的brew包管理來安裝gem
$ brew install ruby
注:gems其實(shí)是ruby的包管理,ruby自1.9.2以后已經(jīng)安裝gems
gem安裝完成后我們還要修改ruby的下載源到國(guó)內(nèi)
參考網(wǎng)站(只需要了解到該網(wǎng)站下的如何使用
就可以了)
http://gems.ruby-china.org/
安裝fastlane
安裝fastlane
和shenzhen
的前提是確保已經(jīng)安裝了xcode-tool-chain工具鏈,如果本地沒有安裝這個(gè)工具鏈,需要下載并安裝,最簡(jiǎn)單的辦法就是下載xcode
若已經(jīng)安裝了這個(gè)工具鏈(一般本地安裝了xcode軟件,會(huì)自動(dòng)安裝這個(gè)工具鏈的),鍵入如下命令
$ sudo gem install fastlane
可能需要輸入密碼,密碼為現(xiàn)在mac登入賬戶下的登錄密碼
如果出現(xiàn)如下錯(cuò)誤
while executing gem ... (Errno::EPERM)
…
…
…
鍵入
$ export GEM_HOME=~/.ruby;sudo nvram boot-args="rootless=0"; sudo reboot
等待重啟完成后繼續(xù)安裝fastlane
$ sudo gem install –n /usr/local/bin fastlane --no-ri --no-rdoc
$ sudo gem install –n /usr/local/bin fir-cli --no-ri --no-rdoc
為項(xiàng)目初始化fastlane
檢查初始化
查看項(xiàng)目code文件夾下,與xcodeproj同級(jí)目錄下是否存在fastlane文件夾
如果存在,可以跳過這一步,直接進(jìn)行jenkins設(shè)置和環(huán)境搭建
如果不存在,則要為項(xiàng)目初始化fastlane了
開始
在終端中cd 到項(xiàng)目所在的文件夾下,注意:與xcodeproj文件同級(jí))
執(zhí)行下面的命令
$ fastlane init
按照提示完成輸入
貼幾張樣例圖
- 初始化輸入appleid(該appleid 必須是對(duì)應(yīng)著該項(xiàng)目的,而且在本地xcode中已經(jīng)登錄并存在與鑰匙串中,并確保證書已經(jīng)下載)
- 核對(duì)信息下載文件
fastlane初始化結(jié)束后,會(huì)在本地生成一個(gè)名為fastlane的文件夾文件夾內(nèi)包含三個(gè)文件和兩個(gè)額外的文件夾
Appfile
Deliverfile
Fastfile
metadata
copyright.txt
primary_category.txt
primary_first_sub_category.txt
primary_second_sub_category.txt
secondary_category.txt
secondary_first_sub_category.txt
secondary_second_sub_category.txt
zh-Hans
description.txt
keywords.txt
marketing_url.txt
name.txt
privacy_url.txt
release_notes.txt
support_url.txt
這其中最重要的也是和上傳相關(guān)最大關(guān)聯(lián)的文件就是Fastfile和metadata文件夾中的zh-Hans文件夾中的內(nèi)容.
其中: description.txt:是描述這個(gè)app的文本文檔
keywords.txt::appstore ASO(搜索關(guān)鍵字)
marketing_url.txt :銷售url
name.txt: 應(yīng)用名稱,一般不會(huì)修改
release_notes.txt: 應(yīng)用更新內(nèi)容, 一般在發(fā)布版本的時(shí)候都會(huì)修改
Fastfile文件樣例: (ruby代碼)
# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# can also be listed using the `fastlane actions` command
# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`
# If you want to automatically update fastlane if a new version is available:
# update_fastlane
# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "1.98.0"
default_platform :ios
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
end
desc "Runs all the tests"
lane :test do
scan
end
desc "Submit a new Beta Build to Apple TestFlight"
desc "This will also make sure the profile is up to date"
lane :beta do
# match(type: "appstore") # more information: https://codesigning.guide
gym(scheme: "example") # Build your app - more options available
pilot
# sh "your_script.sh"
# You can also use other beta testing services here (run `fastlane actions`)
end
desc "Deploy a new version to the App Store"
lane :appstore do
# match(type: "appstore")
# snapshot
gym(scheme: "example") # Build your app - more options available
deliver(force: true)
# frameit
end
# You can define as many lanes as you want
after_all do |lane|
# This block is called, only if the executed lane was successful
# slack(
# message: "Successfully deployed new App Update."
# )
end
error do |lane, exception|
# slack(
# message: exception.message,
# success: false
# )
end
end
# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# fastlane reports which actions are used
# No personal data is recorded. Learn more at https://github.com/fastlane/enhancer
到現(xiàn)在為止,所有的準(zhǔn)備工作已經(jīng)就緒,現(xiàn)在我們就要進(jìn)入jenkins的后臺(tái)去進(jìn)行持續(xù)集成了.
注意:fastlane的init工作一般只進(jìn)行一次,如果發(fā)現(xiàn)存在fastlane文件夾,就不要進(jìn)行這個(gè)工作了,而且這個(gè)文件會(huì)隨著svn或者git一起上傳上去
我已經(jīng)減少了不必要下載的文件和樣例,只保留了兩個(gè)文件 fastlane/metadata/zh-Hans/下的description.txt和release_notes.txt 因?yàn)樵谖铱磥?這個(gè)文件才是有可能經(jīng)常會(huì)改動(dòng)的,其他的如果想要修改,可以去https://itunesconnect.apple.com 上登錄去修改
jenkins的配置和自動(dòng)打包腳本的編寫
啟動(dòng)jenkins
在終端輸入
$ jenkins –h
輸出結(jié)果:
如果看到最后一行 Jenkins is fully up and running
則代表jenkins啟動(dòng)成功
在瀏覽器(safiri或chrome中輸入地址 127.0.0.1:8080),默認(rèn)jenkins的啟動(dòng)端口是8080
如果是第一次進(jìn)入到后臺(tái),會(huì)有一些基本的配置需要來完成.按照提示來就可以了
到最后一步,會(huì)讓我們?nèi)グ惭b插件,如果網(wǎng)絡(luò)環(huán)境不好,可能會(huì)出現(xiàn)安裝失敗的情況,但是不會(huì)影響主要功能的使用
jenkins界面
如果所有的配置都是在正確的,那么你會(huì)看到這樣的界面
顧名思義:
新建
可以新建一個(gè)持續(xù)集成的任務(wù)
用戶
管理用戶
任務(wù)歷史
可以查看持續(xù)集成的歷史
系統(tǒng)管理
類似于系統(tǒng)設(shè)置,一般我們使用的較多的功能則是插件管理.
Credentials
管理所有的通行證,可以是git的也可以是svn的……
構(gòu)建view界面
構(gòu)建視圖view可以查看當(dāng)前的構(gòu)建的隊(duì)列和構(gòu)建任務(wù)的進(jìn)行情況
搭建基于jenkins的iOS_example_beta項(xiàng)目
項(xiàng)目目的
建立該項(xiàng)目的目的主要是為了一鍵能夠?qū)OS應(yīng)用example
能夠快速方便的提供給測(cè)試人員測(cè)試,并且能夠?qū)㈨?xiàng)目一鍵打包成三個(gè)版本(dev,qa,prod)和分發(fā)給測(cè)試人員測(cè)試新建任務(wù)
回到主面板,點(diǎn)擊新建輸入信息
名稱我們定為iOS_example_beta
緊接著選擇 構(gòu)建一個(gè)只有風(fēng)格的軟件項(xiàng)目 最后點(diǎn)擊ok
- 源碼管理
隨后進(jìn)入一個(gè)新的頁面 找到源碼管理
如果發(fā)現(xiàn)源碼管理中沒有找到你想要的 可能是沒有安裝對(duì)應(yīng)的插件,安裝插件的過程如下
主界面系統(tǒng)管理管理插件可選插件找到 GIT plugin
或者Subversion Plug-in勾選后點(diǎn)擊最下面的按鈕直接安裝安裝完后重啟即可
可能會(huì)由于網(wǎng)絡(luò)的原因,安裝失敗或根本不能訪問到j(luò)enkins-ci.org
提供一個(gè)subversion.hdi的國(guó)內(nèi)私有下載地址,如果失效,請(qǐng)另行想辦法下載
$ wget http://7xrlqi.com1.z0.glb.clouddn.com/subversion.hpi
下載完成后,上傳到j(luò)enkins安轉(zhuǎn)即可
主界面系統(tǒng)管理管理插件高級(jí)上傳插件選擇文件后上傳完成后重啟
插件安裝完成后,進(jìn)入到項(xiàng)目配置頁面,找到源碼管理
這個(gè)項(xiàng)目我們使用的是svn 輸入svn的地址和用戶名密碼
- 添加構(gòu)建命令
找到構(gòu)建
這一欄點(diǎn)擊增加構(gòu)建步驟
點(diǎn)擊Execute shell
輸入如下命令
#1.usr/bin/env bash
source ~/.bash_profile
發(fā)布qa環(huán)境
en="qa"
#打包文件存放的目錄
di="${HOME}/jenkins/app/${JOB_NAME}/${en}/"
#打包的文件的名稱
name="example_${en}-${BUILD_NUMBER}-`date \"+%m月%d日%H時(shí)%M分\"`.ipa"
#ci環(huán)境變量路徑
cienvpath="${WORKSPACE}/example/ci.env"
#修改ci.env的值
echo "{\"env\":\"${en}\"}">$cienvpath
#修改應(yīng)用名稱
sed -i '' -e "s/example/example_${en}/g" ${WORKSPACE}/example/Info.plist
mkdir -p $di
#打包
#編譯環(huán)境
scheme="example"
configuration="Debug"
export_method='ad-hoc'
#指定項(xiàng)目地址
in_path="${WORKSPACE}/example.xcodeproj"
#指定輸出歸檔文件地址
archive_path="$di/archive/example_${en}-${BUILD_NUMBER}-`date \"+%m月%d日%H時(shí)%M分\"`.xcarchive"
#先清空前一次build在發(fā)布
gym --project ${in_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${di} --output_name ${name}
#ipa build -c Release -d $di --ipa $name
#發(fā)布到蒲公英
curlfileurl="@${di}${name}"
curl -F "file=${curlfileurl}" -F "uKey=..." -F "_api_key=..." http://www.pgyer.com/apiv1/app/upload
#還原名稱
sed -i '' -e "s/example_${en}/example/g" ${WORKSPACE}/example/Info.plist
#發(fā)布production環(huán)境 ali環(huán)境(測(cè)試用) 不是發(fā)布到App Store
en="prod"
di="${HOME}/jenkins/app/${JOB_NAME}/${en}/"
name="example_${en}-${BUILD_NUMBER}-`date \"+%m月%d日%H時(shí)%M分\"`.ipa"
echo "{\"env\":\"${en}\"}">$cienvpath
sed -i '' -e "s/example/example_${en}/g" ${WORKSPACE}/example/Info.plist
mkdir -p $di
#打包
#編譯環(huán)境
scheme="example"
configuration="Debug"
export_method='ad-hoc'
#指定項(xiàng)目地址
in_path="${WORKSPACE}/example.xcodeproj"
#指定輸出歸檔文件地址
archive_path="$di/archive/example_${en}-${BUILD_NUMBER}-`date \"+%m月%d日%H時(shí)%M分\"`.xcarchive"
#先清空前一次build在發(fā)布
gym --project ${in_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${di} --output_name ${name}
#發(fā)布到testin
curlfileurl="@${di}${name}"
#上傳到testin
curl -F "file=${curlfileurl}" -F "user_key=..." -F "update_notify=1" http://api.pre.im/api/v1/app/upload
#還原名稱
sed -i '' -e "s/example_${en}/example/g" ${WORKSPACE}/example/Info.plist
#發(fā)布dev環(huán)境
en="dev"
di="${HOME}/jenkins/app/${JOB_NAME}/${en}/"
name="example_${en}-${BUILD_NUMBER}-`date \"+%m月%d日%H時(shí)%M分\"`.ipa"
echo "{\"env\":\"${en}\"}">$cienvpath
sed -i '' -e "s/example/example_${en}/g" ${WORKSPACE}/example/Info.plist
mkdir -p $di
#發(fā)布到fir.im 需要安裝gem插件 fir-cli #gem install fir-cli
fir upgrade
fir build_ipa ${WORKSPACE} -o $di$name -p -T ...
點(diǎn)擊保存
- 開始第一次構(gòu)建
現(xiàn)在我們回到主面板,發(fā)現(xiàn)已經(jīng)多了一個(gè)名為iOS_example_qa
的項(xiàng)目,點(diǎn)擊進(jìn)入后 點(diǎn)擊立即構(gòu)建開始第一次構(gòu)建
配置一鍵上傳iTunesConnect
項(xiàng)目目的
建立該項(xiàng)目的目的主要是為了一鍵能夠?qū)OS應(yīng)用example
能夠快速方便的上傳到蘋果iTunesConnect的服務(wù)器,節(jié)省開發(fā)人員和上傳人員的時(shí)間
建立任務(wù)
如4.3.1所示,新建一個(gè)名為iOS_example_appstore的任務(wù)
svn地址和描述都和上一個(gè)一樣
編寫腳本
如4.3.4所示:腳本更改內(nèi)容如下
#1.usr/bin/env bash
cd ${WORKSPACE}
chmod +x upload2Appstore.sh
./upload2Appstore.sh
upload2Appstore.sh 這個(gè)文件是隨著svn一起down下來的
附: upload2Appstore.sh 源碼
#1.usr/bin/env bash
cienvpath="example/ci.env"
#修改ci.env的值
echo "{\"env\":\"production\"}">$cienvpath
rm -f example.ipa
rm -f example.app.dSYM.zip
fastlane ios appstore