This buildbot primarily exists to ensure reliable builds of the nightly channel for OSX.
- Fairly vanilla Mac Mini
- Mountain Lion
- Sleep turned off
- Set to auto-start after power failure
- Full XCode installation (from App Store)
- Install XCode command line tools (via preferences pane)
The following accounts are needed:
* ``buildbot_master`` * ``buildbot_slave``
They are hidden from the login window (for cosmetic reasons):
sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add buildbot_master buildbot_slave
Become the buildbot_master
user:
sudo su - buildbot_master
Clone this repository:
git clone git://github.com/yaybu/yaybu-releasebot ~/ReleaseBot
Create a virtualenv:
curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.10.1.tar.gz tar xvfz virtualenv-1.10.1.tar.gz cd virtualenv-1.10.1 python virtualenv.py /Users/buildbot_master/Virtualenv cd .. rm -rf virtualenv-*
Install buildbot and its dependencies:
~/Virtualenv/bin/pip install -r ~/ReleaseBot/master/requirements.txt
Create the sqlite database:
~/Virtualenv/bin/buildbot upgrade-master ~/ReleaseBot/master/
Create a Launchd plist for it (owned by root:wheel
) at /Library/LaunchDaemons/buildbot_master.plist
:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>StandardOutPath</key> <string>twistd.stdout.log</string> <key>StandardErrorPath</key> <string>twistd.stderr.log</string> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/Users/buildbot_master/Virtualenv/bin:/opt/local/bin:/sbin:/usr/sbin:/bin:/usr/bin</string> </dict> <key>GroupName</key> <string>daemon</string> <key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict> <key>Label</key> <string>com.yaybu.releasebot.master</string> <key>ProgramArguments</key> <array> <string>twistd</string> <string>--nodaemon</string> <string>-y</string> <string>./buildbot.tac</string> </array> <key>RunAtLoad</key> <true/> <key>UserName</key> <string>buildbot_master</string> <key>WorkingDirectory</key> <string>/Users/buildbot_master/ReleaseBot/master</string> </dict> </plist>
Start the service:
sudo launchctl load -F /Library/LaunchDaemons/buildbot_master.plist
There should be a buildbot visible at:
http://hostname:8080/
Become the buildbot_slave
user:
sudo su - buildbot_slave
We will be using Xcode tools as the buildbot_slave
user so need to agree to its T&C:
xcodebuild -license
Clone this repository:
git clone git://github.com/yaybu/yaybu-releasebot ~/ReleaseBot
Create a virtualenv:
curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.10.1.tar.gz tar xvfz virtualenv-1.10.1.tar.gz cd virtualenv-1.10.1 python virtualenv.py /Users/buildbot_slave/Virtualenv cd .. rm -rf virtualenv-*
Install buildbot and its dependencies:
~/Virtualenv/bin/pip install -r ~/ReleaseBot/slave/requirements.txt
Create a Launchd plist for it (owned by root:wheel
) at /Library/LaunchDaemons/buildbot_slave_osx.plist
:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>StandardOutPath</key> <string>twistd.stdout.log</string> <key>StandardErrorPath</key> <string>twistd.stderr.log</string> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/Users/buildbot_slave/Virtualenv/bin:/opt/local/bin:/sbin:/usr/sbin:/bin:/usr/bin</string> </dict> <key>GroupName</key> <string>daemon</string> <key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict> <key>Label</key> <string>yaybu.com.releasebot.slave.osx</string> <key>ProgramArguments</key> <array> <string>twistd</string> <string>--nodaemon</string> <string>-y</string> <string>./buildbot.tac</string> </array> <key>RunAtLoad</key> <true/> <key>UserName</key> <string>buildbot_slave</string> <key>WorkingDirectory</key> <string>/Users/buildbot_slave/ReleaseBot/slave</string> </dict> </plist>
Start it:
sudo launchctl load -F /Library/LaunchDaemons/buildbot_slave_osx.plist
Slave should show as connected at this URL:
http://hostname:8080/buildslaves
First part of setup was done as the Administrator user (the user that is created when setting up Windows 7 from scratch).
Follow the instructions in the Yaybu.exe README (https://github.com/yaybu/yaybu.exe) up to (and including) installing the requirements.
Install pywin32 using the binary installer.
Install buildbot_slave:
C:\Python27\python -m pip install buildbot_slave C:\Python27\Scripts\buildslave --version
Create a new slave:
mkdir C:\ReleaseBot\ mkdir C:\ReleaseBot\win7_slave C:\Python27\Scripts\buildslave -r C:\ReleaseBot\win7_slave cherrytree:9989 win7_slave pass
Test slave works:
C:\Python27\Scripts\buildslave start .
Should see it connect in buildbot web UI.
Now to install the buildbot slave Windows service.
Create an account for the buildbot slave - buildbot_slave
is ideal. It shouldn't be an adminstrator. But it does need to have the SeServiceLoginRight permission, which you can grant with ntrights from the Win2k3 resource kit. NOTE: Even when an adminstrator, you need to run this with an Administrator terminal or the command will fail:
ntrights +r SeServiceLogonRight -u buildbot_slave
This next bit is a bit fiddly as it needs to create some registry keys that it doesnt have permission to o/.
Create the service:
C:\Python27\Scripts\buildbot_serice.py --user .\buildbot_spave --password password --startup auto install
Start the service. It will fail to start:
net start buildbot
Using regedit find HKEY_LOCAL_MACHINE\SystemCurrentControlSet\services\Buildbot
and give the buildbot_slave
user Full Control
in the permissions context menu.
Again, try to start the service. It will fail to start once more:
net start buildbot
Refresh regedit (with F5) and you should now see a Parameters
folder within the Buildbot
key. It will be empty. Add a string key named directories
and set it to C:\ReleaseBot\win7_slave
.
Now try and start it again. This time it should start, and you should see it connect in the buildbot web ui:
net start buildbot
First of all, reboot and make sure everything comes up:
sudo reboot