自動化-自定義Actions

一昙啄、升級必備操作

  • 修改完核心代碼后律歼,一共還需要做以下幾步:
    • 1踊挠、修改spec文件(修改s.version只怎,s.description等)
    • 2袜瞬、pod install (使Example與pod下來的庫產(chǎn)生關(guān)聯(lián))
    • 3、提交本地倉庫代碼至遠(yuǎn)程倉庫
    • 4身堡、打標(biāo)簽邓尤,并提交至遠(yuǎn)程
    • 5、驗(yàn)證spec贴谎,并提至私有索引庫

二汞扎、Fastlane

1、簡介

Fastlane文檔說明

  • Fastlane是一個(gè)ruby腳本集合擅这,它可以按照我們指定的路線澈魄,在指定位置執(zhí)行我們所要執(zhí)行的操作。這里我們稱這樣的路線為「航道(lane)」仲翎,這樣的操作稱為「Action」

  • Action是Fastlane自動化流程中的最小執(zhí)行單元痹扇,用來執(zhí)行Fastlane腳本中的命令铛漓,關(guān)于更多的描述可以到Actions - fastlane docs查看,里面也介紹了常用的action有哪些帘营,順帶附上action的源碼地址票渠,這個(gè)源碼在后面自定義起參考作用

2、 安裝

  • 確保ruby為最新版本
brew update
brew install ruby
  • 安裝fastlane
    sudo gem install -n /usr/local/bin fastlane

  • 查看當(dāng)前fastlane版本
    fastlane --version

  • 查看所有action
    fastlane actions

三芬迄、fastlane初始化

cd到你的本地組件倉庫的根目錄

  • 初始化fastlane
    fastlane init

不過這個(gè)步驟對我們來說可以跳過问顷,在init后提示你輸入一些東西,包括上傳需要用到的APPLE ID什么的一堆東西禀梳,由于我們并不涉及這些杜窄,所以我們使用更方便的方式

# 創(chuàng)建一個(gè)fastlane文件夾
# 進(jìn)入fastlane目錄
# 創(chuàng)建一個(gè)Fastfile文件
mkdir fastlane
cd fastlane
touch Fastfile
屏幕快照 2018-06-05 16.41.52.png

1、修改Fastfile

desc 'EmojiToolModelTool 航道用來自動化升級維護(hù)私有庫'
lane :EmojiToolModelTool do |options|

tagNum = options[:tag]
podspecName = options[:specName]

# 航道上需要執(zhí)行的操作
# 具體action到 https://docs.fastlane.tools/actions 上面查找
# 這里的路徑以倉庫根目錄為準(zhǔn)

# 1算途、修改spec文件(修改s.version塞耕,s.description等)
# 2、pod install (使Example與pod下來的庫產(chǎn)生關(guān)聯(lián))
cocoapods(
  clean: true,
  podfile: "./Example/Podfile"
)


# 3嘴瓤、提交本地倉庫代碼至遠(yuǎn)程倉庫
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote


# 4扫外、打標(biāo)簽,并提交至遠(yuǎn)程
add_git_tag(
  tag: tagNum
)
push_git_tags


# 5廓脆、驗(yàn)證spec筛谚,并提至私有索引庫
pod_lib_lint(allow_warnings: true)
# 因?yàn)楸镜厮饕龓靣epo的名字是基本上不會去改變的,所以這里直接寫死 XDSpecs
# podspec的名字需要由外界傳入
pod_push(path: "#{podspecName}.podspec", repo: "XDSpecs", allow_warnings: true)
![屏幕快照 2018-06-05 17.06.06.png](https://upload-images.jianshu.io/upload_images/1658726-cdc3496cf8e8c406.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

end

2 停忿、驗(yàn)證Fastfile
fastlane lanes

屏幕快照 2018-06-05 16.53.28.png

3驾讲、執(zhí)行fastlane
需要在組件倉庫的根目錄下執(zhí)行,進(jìn)入到fastlane的同級目錄下
cd EmojiToolModel

屏幕快照 2018-06-05 16.55.55.png

  • 3.1 然后執(zhí)行
#EmojiToolModelTool : 是你自定義的航道名稱(在上面修改Fastfile里定義的名稱)
#tag : 是你要打的tag(tag要與spec文件的tag一致,注意這里不能存在已經(jīng)存在的tag,如果存在會報(bào)錯(cuò),后面會說)
#EmojiToolModel : 是你定義的spec文件名稱

fastlane EmojiToolModelTool tag:0.1.1 specName:EmojiToolModel
屏幕快照 2018-06-05 17.06.06.png

四、自定義Action

  • 以上的過程已經(jīng)可以完成一整個(gè)自動化更新了席赂,但是有一點(diǎn)需要注意的是吮铭,這個(gè)輸入的tag可能會面臨一個(gè)問題,那就是本地和遠(yuǎn)程都可能已經(jīng)存在颅停,即發(fā)生沖突谓晌,這個(gè)時(shí)候我們可以選擇自動刪除本地和遠(yuǎn)程沖突的那個(gè)tag,再重新上傳當(dāng)前tag

1癞揉、創(chuàng)建一個(gè)新的action

fastlane new_action

屏幕快照 2018-06-05 17.09.42.png

  • 完成后fastlane目錄下就會多出一個(gè)名為actions的文件夾纸肉,里面存放的就是你自定義action


    屏幕快照 2018-06-05 17.11.02.png

2、編輯自定義action

打開remove_git_tag.rb烧董,開始自定義我們的action吧毁靶,什么?不會語法怎么辦逊移?可以參考別人的嘛预吆,上面給出的action的源碼地址就有用武之地了,比如pod_push胳泉。這里我直接貼出我已經(jīng)完成的主要代碼

module Fastlane
  module Actions
    module SharedValues
      REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
    end

    class RemoveTagAction < Action
      def self.run(params)
        # 這里寫要執(zhí)行的操作 
        # params[:參數(shù)名稱] 參數(shù)名稱與下面self.available_options中的保持一致

        tagName = params[:tag]
        isRemoveLocalTag = params[:rL]
        isRemoveRemoteTag = params[:rR]

        # 定義數(shù)組 添加需要執(zhí)行的命令
        cmds = []

        # 刪除本地標(biāo)簽
        if isRemoveLocalTag
          cmds << "git tag -d #{tagName} "
        end

        # 刪除本地標(biāo)簽
        if isRemoveRemoteTag
          cmds << " git push origin :#{tagName}"

        end

        # 執(zhí)行數(shù)組里的命令
        result = Actions.sh(cmds.join('&'))
        UI.success("Successfully remove tag #{tagName}")
        return result

      end


      def self.description
        "刪除本地和遠(yuǎn)程的標(biāo)簽!!!"
      end

      def self.details
        # Optional:
        # this is your chance to provide a more detailed description of this action
        "使用這個(gè)action,來刪除本地和遠(yuǎn)程沖突的tag"
      end

      def self.available_options
        # Define all options your action supports. 
        
        # Below a few examples
        [ 
          # tagName : 標(biāo)簽名稱  description : 描述   optional : 是否可選  is_string : 是否是字符串
          FastlaneCore::ConfigItem.new(key: :tag,
                                       description: "刪除的標(biāo)簽名稱",
                                       optional: false,
                                       is_string: true),

          # rL(remove Local) : 標(biāo)簽名稱  description : 描述   optional : 是否可選  is_string : 是否是字符串
          FastlaneCore::ConfigItem.new(key: :rL,
                                       description: "是否刪除本地標(biāo)簽",
                                       optional: true,
                                       is_string: false,
                                       default_value: true),

          # rR(remove Remote) : 標(biāo)簽名稱  description : 描述   optional : 是否可選  is_string : 是否是字符串
          FastlaneCore::ConfigItem.new(key: :rR,
                                       description: "是否刪除遠(yuǎn)程標(biāo)簽",
                                       optional: true,
                                       is_string: false,
                                       default_value: true)
        ]
      end

      def self.output
        # Define the shared values you are going to provide
        # Example
        [
          ['REMOVE_TAG_CUSTOM_VALUE', 'A description of what this value contains']
        ]
      end

      def self.return_value
        nil
        # If your method provides a return value, you can describe here what it does
      end

      def self.authors
        # So no one will ever forget your contribution to fastlane :) You are awesome btw!
        ["CodeST"]
      end

      def self.is_supported?(platform)
        # you can do things like
        # 
        #  true
        # 
        #  platform == :ios
        # 
        #  [:ios, :mac].include?(platform)
        # 

        platform == :ios
      end
    end
  end
end

3拐叉、查看action描述

  • 驗(yàn)證我們寫的這個(gè)action是否有錯(cuò)
    fastlane action remove_tag
    屏幕快照 2018-06-05 17.23.04.png
  1. 驗(yàn)證成功后可以完善自己的fastlane
  • 新增3.1
desc 'EmojiToolModelTool 航道用來自動化升級維護(hù)私有庫'
lane :EmojiToolModelTool do |options|

tagName = options[:tag]
podspecName = options[:specName]

# 航道上需要執(zhí)行的操作
# 具體action到 https://docs.fastlane.tools/actions 上面查找
# 這里的路徑以倉庫根目錄為準(zhǔn)

# 1岩遗、修改spec文件(修改s.version,s.description等)
# 2凤瘦、pod install (使Example與pod下來的庫產(chǎn)生關(guān)聯(lián))
cocoapods(
  clean: true,
  podfile: "./Example/Podfile"
)


# 3宿礁、提交本地倉庫代碼至遠(yuǎn)程倉庫
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote

# 3.1 驗(yàn)證tag是否存在,如果存在,應(yīng)該深處本地標(biāo)簽和遠(yuǎn)程標(biāo)簽
if git_tag_exists(tag: tagName)
    UI.success("發(fā)現(xiàn)tag:#{tagName} 已經(jīng)存在,即將執(zhí)行,刪除操作??")
    remove_tag(tag:tagName)
end


# 4、打標(biāo)簽蔬芥,并提交至遠(yuǎn)程
add_git_tag(
  tag: tagName
)
push_git_tags


# 5梆靖、驗(yàn)證spec,并提至私有索引庫
pod_lib_lint(allow_warnings: true)
# 因?yàn)楸镜厮饕龓靣epo的名字是基本上不會去改變的笔诵,所以這里直接寫死 XDSpecs
# podspec的名字需要由外界傳入
pod_push(path: "#{podspecName}.podspec", repo: "XDSpecs", allow_warnings: true)
end

5 . 最后驗(yàn)證

  • 查看已經(jīng)存在的tag
    git tag

  • 用工具刪除已經(jīng)存在的tag
    fastlane EmojiToolModelTool tag:0.1.3 specName:EmojiToolModel

    屏幕快照 2018-06-05 18.00.52.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末返吻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乎婿,更是在濱河造成了極大的恐慌测僵,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谢翎,死亡現(xiàn)場離奇詭異捍靠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)森逮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門榨婆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吊宋,你說我怎么就攤上這事纲辽⊙瘴洌” “怎么了璃搜?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鳞上。 經(jīng)常有香客問我这吻,道長,這世上最難降的妖魔是什么篙议? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任唾糯,我火速辦了婚禮,結(jié)果婚禮上鬼贱,老公的妹妹穿的比我還像新娘移怯。我一直安慰自己,他們只是感情好这难,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布舟误。 她就那樣靜靜地躺著,像睡著了一般姻乓。 火紅的嫁衣襯著肌膚如雪嵌溢。 梳的紋絲不亂的頭發(fā)上眯牧,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音赖草,去河邊找鬼学少。 笑死,一個(gè)胖子當(dāng)著我的面吹牛秧骑,可吹牛的內(nèi)容都是我干的版确。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乎折,長吁一口氣:“原來是場噩夢啊……” “哼阀坏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笆檀,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤忌堂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后酗洒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體士修,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年樱衷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棋嘲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矩桂,死狀恐怖沸移,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侄榴,我是刑警寧澤雹锣,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站癞蚕,受9級特大地震影響蕊爵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桦山,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一攒射、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恒水,春花似錦会放、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春窗市,著一層夾襖步出監(jiān)牢的瞬間先慷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工咨察, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留论熙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓摄狱,卻偏偏與公主長得像脓诡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子媒役,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容