在 Windows 下用 Bamboo 和 IAR 实现持续集成

前两天写了篇名为《在 Ubuntu 的 KVM 中安装 Windows 系统》的文章,主要介绍了如何在 Linux 平台上运行 Windows 虚拟主机。

而搭建这一虚拟机的主要目的,就是为了完成今天这篇文章所介绍的内容:可持续化集成

Previously on Tommy’s Blog 有提到,我们使用的是 Atlassian 全家桶,因此配套的 CI 系统就是 Bamboo 啦。

安装 Bamboo Agent

众所周知,IAR 只能跑在 Windows 下面,所以我们需要配置一个能跟 Bamboo 系统联动的 Bamboo Agent。大家可以参考官方的 Bamboo remote agent installation guide,里面有详细的 Bamboo Agent 安装方法介绍。

在安装之前我们还需要先去 Java 官方的 Oracle 网站下载 JDK,因为 Atlassian 家的东西都是跑在 Java 上面的。当前 JDK 最新的版本是 JDK 8u111。选择对应架构的版本,比如 x86,然后一路 Next 就安装好了。

为了重启以后不用人工启动 Bamboo Agent 服务,我们还需要在最后加一个小参数 installntservice,这样就可以把 Bamboo Agent 注册为系统服务了。像这样:

1
java -jar atlassian-bamboo-agent-installer-5.13.2.jar https://bamboo.domain.ltd/agentServer/ installntservice

注意:该命令必须要在管理员权限下执行,否则会报权限错误!

安装 Babun

因为 Windows 下默认没有 Git 之类的工具,更不要说 OpenSSH 类的客户端了。所以要想好好的把 Bamoo Agent 跑起来,Git 是不可或缺的,毕竟我们总要取代码仓库的代码不是?

Babun 是个什么鬼?参考官方的 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

说人话和中文就是:一个好用的 Windows 下的基于 Cygwin 的 Linux-like 命令行工具套件。

安装方法也很简单,下载压缩包,解压缩,然后运行 install.bat 搞掂。

默认安装在用户目录里面的 .babun 目录内,稍后我们会用到。

安装好的 Babun 如上图所示,已经内置好了 Git 和 OpenSSH,我们就不需要再单独安装这 2 个软件了。我的用户名是 Builder,所以 Babun 的安装目录是:

1
C:\Users\Builder\.babun

IAR 命令行编译

本来以为 IAR 的命令行编译会比较麻烦,还要重新写 Makefile 什么的,然而是我多虑了。官方在 2013 年就已经给出了标准答案:Technical Note 47884

本身我们用的就是 IAR Embedded Workbench IDE,所以保存的文件会有 .ewp 后缀的项目文件。只需要进入项目目录,运行如下命令就可以命令行编译了:

1
<installation dir>\common\bin\IarBuild.exe test.ewp -build Debug -log all

其中 -build Debug 相当于传统意义上的 make clean; make Debug-log all 表示 Log 所有信息,这个可要可不要。

需要注意的是,这里的 Debug 并不一定是我们理解的传统意义上的 Debug,而是一个 Configuration 而已,具体的参数需要与实际项目配置相匹配,否则无法正常编译。

举个栗子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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>

设置环境变量

有了 Bamboo Agent 有了 Git,而且 IAR 命令行也编译通过了。那么 Bamboo 自动化应该可以做了吧?No no no, that’s too young too simple, sometimes naive.

当你运行 Bamboo 编译的时候,会出现类似无法 fork,git 工作不正常的错误,failed with code 128。这个就是环境变量设置的问题了。

打开系统环境变量设置,并在用户的环境变量中增加:

1
C:\Users\Builder\.babun\cygwin\bin

这样当前用户才能直接在系统级别访问到 Git 和 OpenSSH 等工具,如图:

接下来我们需要打开「系统服务」,把 Bamboo Agent 的运行账号从系统修改为当前用户 Builder

再次运行 Bamboo 编译,发现环境变量已经变成了:

1
Path=C:\Users\Builder\AppData\Local\Microsoft\WindowsApps;C:\Users\Builder\.babun;C:\Users\Builder\.babun\cygwin\bin

并且也可以正常编译和输出项目文件了。

这里也参考了 Atlassian 官方的文档:Bamboo does not pick up the Path environment variable correctly,但是并没有使用官方推荐的 Work around,而是使用了上述的方法。

Windows 自动登录

Windows 在重启后,默认停留在登录界面,这个时候远程桌面什么的都是不可用的。为了方便远程管理,我们还要多做一个步骤,那就是自动登录。

这个也很简单,在下面的 Cortana 中输入:netplwiz

启动 User Accounts,选中要登录的账号,去除登录电脑需要用户名和密码前面的复选框,输入账号和密码就可以了,如图:

参考