前兩天寫(xiě)了篇名為《在 Ubuntu 的 KVM 中安裝 Windows 系統(tǒng)》的文章玖详,主要介紹了如何在 Linux 平臺(tái)上運(yùn)行 Windows 虛擬主機(jī)。
而搭建這一虛擬機(jī)的主要目的循衰,就是為了完成今天這篇文章所介紹的內(nèi)容:可持續(xù)化集成。
Previously on Tommy's Blog 有提到褐澎,我們使用的是 Atlassian 全家桶会钝,因此配套的 CI 系統(tǒng)就是 Bamboo 啦。
安裝 Bamboo Agent
眾所周知,IAR 只能跑在 Windows 下面迁酸,所以我們需要配置一個(gè)能跟 Bamboo 系統(tǒng)聯(lián)動(dòng)的 Bamboo Agent先鱼。大家可以參考官方的 Bamboo remote agent installation guide,里面有詳細(xì)的 Bamboo Agent 安裝方法介紹奸鬓。
在安裝之前我們還需要先去 Java 官方的 Oracle 網(wǎng)站下載 JDK焙畔,因?yàn)?Atlassian 家的東西都是跑在 Java 上面的。當(dāng)前 JDK 最新的版本是 JDK 8u111串远。選擇對(duì)應(yīng)架構(gòu)的版本宏多,比如 x86
,然后一路 Next 就安裝好了澡罚。
為了重啟以后不用人工啟動(dòng) Bamboo Agent 服務(wù)伸但,我們還需要在最后加一個(gè)小參數(shù) installntservice
,這樣就可以把 Bamboo Agent 注冊(cè)為系統(tǒng)服務(wù)了留搔。像這樣:
java -jar atlassian-bamboo-agent-installer-5.13.2.jar https://bamboo.domain.ltd/agentServer/ installntservice
注意:該命令必須要在管理員權(quán)限下執(zhí)行更胖,否則會(huì)報(bào)權(quán)限錯(cuò)誤!
安裝 Babun
因?yàn)?Windows 下默認(rèn)沒(méi)有 Git 之類的工具隔显,更不要說(shuō) OpenSSH 類的客戶端了却妨。所以要想好好的把 Bamoo Agent 跑起來(lái),Git 是不可或缺的括眠,畢竟我們總要取代碼倉(cāng)庫(kù)的代碼不是彪标?
Babun 是個(gè)什么鬼?參考官方的 feature list哺窄,Babun 是:
- Pre-configured Cygwin with a lot of addons
- Silent command-line installer, no admin rights required
- pact - advanced package manager (like apt-get or yum)
- xTerm-256 compatible console
- HTTP(s) proxying support
- Plugin-oriented architecture
- Pre-configured git and shell
- Integrated oh-my-zsh
- Auto update feature
- "Open Babun Here" context menu entry
說(shuō)人話和中文就是:一個(gè)好用的 Windows 下的基于 Cygwin 的 Linux-like 命令行工具套件捐下。
安裝方法也很簡(jiǎn)單账锹,下載壓縮包萌业,解壓縮,然后運(yùn)行 install.bat
搞掂奸柬。
默認(rèn)安裝在用戶目錄里面的 .babun
目錄內(nèi)生年,稍后我們會(huì)用到。
安裝好的 Babun 如上圖所示廓奕,已經(jīng)內(nèi)置好了 Git 和 OpenSSH抱婉,我們就不需要再單獨(dú)安裝這 2 個(gè)軟件了。我的用戶名是 Builder
桌粉,所以 Babun 的安裝目錄是:
C:\Users\Builder\.babun
IAR 命令行編譯
本來(lái)以為 IAR 的命令行編譯會(huì)比較麻煩蒸绩,還要重新寫(xiě) Makefile
什么的,然而是我多慮了铃肯。官方在 2013 年就已經(jīng)給出了標(biāo)準(zhǔn)答案:Technical Note 47884
本身我們用的就是 IAR Embedded Workbench IDE
患亿,所以保存的文件會(huì)有 .ewp
后綴的項(xiàng)目文件。只需要進(jìn)入項(xiàng)目目錄,運(yùn)行如下命令就可以命令行編譯了:
<installation dir>\common\bin\IarBuild.exe test.ewp -build Debug -log all
其中 -build Debug
相當(dāng)于傳統(tǒng)意義上的 make clean; make Debug
步藕。-log all
表示 Log 所有信息惦界,這個(gè)可要可不要。
需要注意的是咙冗,這里的
Debug
并不一定是我們理解的傳統(tǒng)意義上的 Debug沾歪,而是一個(gè) Configuration 而已,具體的參數(shù)需要與實(shí)際項(xiàng)目配置相匹配雾消,否則無(wú)法正常編譯灾搏。
舉個(gè)栗子:
C:\Users\Builder\Desktop\BLE-CC254x-1.4.2.2\Projects\ble\HIDEmuKbd\CC2540DB>"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.3\common\bin\IarBuild.exe" HIDEmuKbd.ewp -build "CC2540DK-MINI Keyfob Slave"
IAR Command Line Build Utility V7.3.2.4037
Copyright 2002-2015 IAR Systems AB.
Changed project file will force a full rebuild: C:\Users\Builder\Desktop\BLE-CC254x-1.4.2.2\Projects\ble\HIDEmuKbd\CC2540DB\HIDEmuKbd.ewp
Building configuration: HIDEmuKbd - CC2540DK-MINI Keyfob Slave
Updating build tree...
0 file(s) deleted.
Updating build tree...
battservice.c
devinfoservice.c
gap.c
gapbondmgr.c
gatt_uuid.c
gattservapp_util.c
hal_adc.c
hal_aes.c
hal_dma.c
hal_drivers.c
hal_flash.c
hal_key.c
hal_lcd.c
hal_led.c
hal_sleep.c
hal_startup.c
hal_timer.c
hal_uart.c
hiddev.c
hidemukbd.c
hidemukbd_Main.c
hidkbdservice.c
npi.c
OnBoard.c
OSAL.c
osal_bufmgr.c
osal_cbtimer.c
OSAL_ClockBLE.c
OSAL_hidemukbd.c
OSAL_Memory.c
OSAL_PwrMgr.c
osal_snv.c
OSAL_Timers.c
peripheral.c
scanparamservice.c
Linking
Total number of errors: 0
Total number of warnings: 0
C:\Users\Builder\Desktop\BLE-CC254x-1.4.2.2\Projects\ble\HIDEmuKbd\CC2540DB>dir "CC2540DK-MINI Keyfob Slave\Exe"
Volume in drive C has no label.
Volume Serial Number is EEF7-E82D
Directory of C:\Users\Builder\Desktop\BLE-CC254x-1.4.2.2\Projects\ble\HIDEmuKbd\CC2540DB\CC2540DK-MINI Keyfob Slave\Exe
01/09/2017 02:58 PM <DIR> .
01/09/2017 02:58 PM <DIR> ..
01/09/2017 02:58 PM 1,493,621 HIDEmuKbd.d51
01/09/2017 02:58 PM 332,658 HidEmuKbd.hex
2 File(s) 1,826,279 bytes
2 Dir(s) 21,357,543,424 bytes free
C:\Users\Builder\Desktop\BLE-CC254x-1.4.2.2\Projects\ble\HIDEmuKbd\CC2540DB>
設(shè)置環(huán)境變量
有了 Bamboo Agent 有了 Git,而且 IAR 命令行也編譯通過(guò)了仪或。那么 Bamboo 自動(dòng)化應(yīng)該可以做了吧确镊?No no no, that's too young too simple, sometimes naive.
當(dāng)你運(yùn)行 Bamboo 編譯的時(shí)候,會(huì)出現(xiàn)類似無(wú)法 fork范删,git 工作不正常的錯(cuò)誤蕾域,failed with code 128
。這個(gè)就是環(huán)境變量設(shè)置的問(wèn)題了到旦。
打開(kāi)系統(tǒng)環(huán)境變量設(shè)置旨巷,并在用戶的環(huán)境變量中增加:
C:\Users\Builder\.babun\cygwin\bin
這樣當(dāng)前用戶才能直接在系統(tǒng)級(jí)別訪問(wèn)到 Git 和 OpenSSH 等工具,如圖:
接下來(lái)我們需要打開(kāi)「系統(tǒng)服務(wù)」添忘,把 Bamboo Agent
的運(yùn)行賬號(hào)從系統(tǒng)修改為當(dāng)前用戶 Builder
:
再次運(yùn)行 Bamboo 編譯采呐,發(fā)現(xiàn)環(huán)境變量已經(jīng)變成了:
Path=C:\Users\Builder\AppData\Local\Microsoft\WindowsApps;C:\Users\Builder\.babun;C:\Users\Builder\.babun\cygwin\bin
并且也可以正常編譯和輸出項(xiàng)目文件了。
這里也參考了 Atlassian 官方的文檔:Bamboo does not pick up the Path environment variable correctly搁骑,但是并沒(méi)有使用官方推薦的 Work around斧吐,而是使用了上述的方法。
Windows 自動(dòng)登錄
Windows 在重啟后仲器,默認(rèn)停留在登錄界面煤率,這個(gè)時(shí)候遠(yuǎn)程桌面什么的都是不可用的。為了方便遠(yuǎn)程管理乏冀,我們還要多做一個(gè)步驟蝶糯,那就是自動(dòng)登錄。
這個(gè)也很簡(jiǎn)單辆沦,在下面的 Cortana 中輸入:netplwiz
啟動(dòng) User Accounts
昼捍,選中要登錄的賬號(hào),去除登錄電腦需要用戶名和密碼前面的復(fù)選框肢扯,輸入賬號(hào)和密碼就可以了妒茬,如圖: