Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save b26168/e9547a2c29831ea8acbb4f7af62cccd7 to your computer and use it in GitHub Desktop.
Save b26168/e9547a2c29831ea8acbb4f7af62cccd7 to your computer and use it in GitHub Desktop.

#建置 xcode project 以及 基本會使用到的 plugin 教學

這篇將介紹如何用 jenkins 來 build xcode 的 project

以及一些會用到的套件簡單的使用

需要更詳細的使用, 一樣就是使用 google 瞜

A. build xcode

首先當然電腦要裝有 xcode, 然後有兩種方式, 一個是直接安裝 xcode integration 的 plug-in, 另一個是直接 key shell script

  1. 使用 xcode integration

   [ref https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin]

   a. 安裝 xcode integration

"Manage Jenkins" -> "Manage Plugin" -> tab "Available" -> 在右上角的 Filter 直接 key "xcode integration" 然後安裝即可
  
b. 設定 xcode

"Manage Jenkins" -> "Configure System" -> "Xcode Builder" 的區域中設定好 Mac 中 xcode 相關檔案的位置 -> "Save"
  
c. 在新的 job 中設定組態 -> "Build" 的區域中 -> "Add build step" 選擇 "Xcode" -> 設定 Target, 基本上就是專案名稱 -> "Save"

其實這樣就都設定好了, 接著 build 看看

結果發生一件事情, console output 顯示了這行
  
```bash
xcrun: error: unable to exec Xcode native xcrun (Permission denied).
```

xcrun 這個東西需要權限, 所以必須再將他權限開啟才能給 jenkins 使用
  1. 使用 shell build
a. key shell script

直接進入 job 的組態設定 -> "Build" 的區域中 -> "Add build step" 選擇 "Execute shell" -> 在 Command 中下 xcode builder 的 build 指令
例如
```bash
sudo xcodebuild -configuration Release -target projectName
```
  
*感覺比使用 xcode integtaion 快多了*
  
_當然有更多的指令, 也能直接透過 shell script 去下指令就好_

B. Log Parser Plugin

事實上, 我們只需要知道 build 完以後有多少 warning, error, 但是 console output 一大串還需要自己去找錯誤訊息在哪邊, 實在是有點 stupid.

這裡使用到了一個簡單的 plugin, 能夠直接 parse user 設定的正則式(regular expression)字串去 show 出 error, warning, info, ok, start 的訊息並且 show 出來

[ref https://wiki.jenkins-ci.org/display/JENKINS/Log+Parser+Plugin]

  1. 安裝 Log Parser Plugin
跟上面的套件安裝方式一樣, 不再解釋
  1. 設定 Parse 內容
首先要寫一個給 Log Parser 能夠看懂得設定檔, 放在本機端, 格式如下
```bash
level regx
```

例如我這邊使用的, 我只需要 parse error 跟 warning 兩種
```bash
error /error\:/
warning /warning\:/
```

如果一個 level 會有不同的 parse 格式, 只要換行在寫另一個格式就好了
  1. Log Parser 設定
一樣進入 "Configure System" 設定, 到 "Console Output Parsing" 的區域, 設定 "Parsing Rules"

"Parsing Rules File" 就是剛剛創的那個檔案, 把他的路徑餵給他, 那 "Description" 就是你可以看到你要選擇甚麼 rule 的選項名稱(等一下就會看到)

之後完成就 "Save"
  1. job 設定
進到 job 的組態設定頁面, "Post-build Actions" 區塊, 因為 console output 是要 build 完才會產生的

那在這裡 "Add post-build action" -> 選擇 "Console output (build log) parsing"

之後就會出現 log parsing 的設定區塊, 可以看到幾個選項

"Mark build Unstable on Warning" 表示當你 parsing 到 warning 的時候, 將這個 build 視為 Unstable

"Mark build Failed on Error" 表示 parsing 到 error 的時候, 視為 Failed (不過我不了解為什麼要多這一項, 因為本身有 error 的時候, 自然就是 build failed  的結果了)

"Show log parser graphs" 勾選的話, job 的 status 會出現一張圖表, 橫軸是 build numbers, 縱軸就是 有幾個 error, warning 等等

接著就是 "Use global rule", 就可以看到剛剛設定的 Description 選項了

"Use project rule" 當然也可以為這個 project 在自己寫一個 rule 檔來用, 他跟 "Use global rule" 是互斥的

   另外一件很重要的事情, 假設你上一次 build 跟這一次的內容完全一樣, 基本上他 build 不會去 parse 到任何東西

   當然內容完全一樣的情況很少見, 但是假設你有這種情況的發生, 其實可以讓 job 在每次 build 的時候就先清空 workspace 就可以正常使用

   可以從 "Build Environment" -> "Delete workspace before build starts" 去勾選即可     最後設定完一樣要 "Save"

  1. 看結果
在都完成也 build 完後, 我們可以進入每一次的 build 頁面, 看到左邊欄位多了一個 "Parsed Console Output" 的選項

點進去以後, 會發現他已經將 warning 與 error 分類好並作連結了, 當你點選他就會自動跳到 parsed 到的那一行

比看 Jenkins 原本的 Console output 方便多了

C. Email Extension Plugin

 在 build 的結果有失敗的時候, 我們會希望系統能自動寄信通知, 其實 Jenkins 本身已經有這個功能

 首先進到 Configure System 裡面的 "E-mail Notification" 區域, 設定 SMTP 的 server 等等設定

 按下 Advanced 可以作更 detail 的設定, 但這裡就不提 SMTP 怎麼設定了, 不同的 SMTP server 跟用的 port 可能不一樣

 可能需要自己去 google 了

 那在設定完之後, 到 job 的組態設定頁面, 新增個建置後事件, 選擇 "E-mail Notification"

 就可以設定建置完寄信給誰了, 基本是 jenkins 預設的寄信條件是 (按問號就會寫以下內容)

1. 每次建置失敗都會觸發寄送新郵件。
2. 建置失敗 (或不穩定) 後建置成功將會觸發寄送郵件,告訴大家危機已經解除。
3. 建置成功後如果發生建置不穩定也會觸發寄送郵件,昭告天下我們又倒退了一步。
4. 除非另外設定,不然每次不穩定的建置都會觸發寄送郵件,告訴大家狀況還沒解除。

 所以基本上很合理, 那為甚麼又需要裝個 Extend 套件呢?

 因為當有符合寄信條件的情況發生後, jenkins 就會用他的範本寄一樣的內容出去, 不管今天是 unstable 還是 failed (信件範本檔位置請自行 google)    但是我們會希望今天 build 的結果不同的情況下, 能寄出不同內容的信, 而且是寄給不同的人, 那我們就要另外在裝這個套件了

 1. 安裝 Email Extension plugin      [ref https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin]    2. SMTP 設定  
   其實跟原本的設定一樣, 但是他不會去吃原本你的 SMTP 設定, 所以這裡就在設定一次吧

 3. 信件內容設定

   在剛剛 SMTP 設定的過程中會發現, 有其他的信件內容設定可以去輸入, 那這些就是剛剛講到的, 為什麼要另外裝這個套件的理由

   我們可以在這裡先設定好一些預設要寄出去的內容, 就不用在 job 的組態裡面去 key

 4. job 中的信件內容設定      雖然剛剛已經有設定內容了, 或者剛剛都用預設的沒有改設定, job 組態頁面裡面還是有提供 user for job 去做信件內容的設定

   一樣在建置後事件裡面去 "Add post-build action" 加入 "Editable Email Notification"

   會發現類似剛剛設定內容的頁面, 這裡就可以在設定一次這個 job 要寄出信件的預設內容以及收件者等

   那假設今天 fail 跟 unstable 要寄的內容跟收件人不同, 就點下面的 "Advanced setting"可以透過不同的 trigger 來作針對性的修改

   這樣就可以有所區別了

 配合剛剛 Log parsing console 的功能, 我們就可以將 warning 和 error 的信件分開處理

 那關於信件的內容以及各欄位的說明, 除了他的套件官方頁面, 也可以到這裡看看中文的說明 http://www.cnblogs.com/zz0412/p/jenkins_jj_01.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment