|
|
| (127 intermediate revisions by 5 users not shown) |
| Line 1: |
Line 1: |
| | {{Obsolete RelEng Page|It was last edited in 2008, and is thus certainly out of date by now.}} |
| | |
| =Intro= | | =Intro= |
| Firefox and Thunderbird releases are currently done using the [http://mxr.mozilla.org/seamonkey/source/tools/release/ Bootstrap] automation scripts, which call into [http://mxr.mozilla.org/seamonkey/source/tools/tinderbox/ Tinderbox client] to do the actual build. | | Firefox and Thunderbird releases are currently done using the [http://wiki.mozilla.org/Build:Release_Automation#Bootstrap Bootstrap] automation scripts, which call into [http://mxr.mozilla.org/seamonkey/source/tools/tinderbox/ Tinderbox client] to do the actual build. |
|
| |
|
| Currently, a human operator must:
| | [http://wiki.mozilla.org/Build:Release_Automation#Buildbot Buildbot] calls bootstrap, parallelizing and serializing where needed. |
| | |
| # log into the appropriate machine
| |
| # check out bootstrap
| |
| # run the appropriate bootstrap command
| |
| | |
| This must be done ~7 times (once per machine), in the right order, to produce a successful release.
| |
| | |
| Work is ongoing to enable [http://buildbot.net Buildbot] to drive the release automation, to enable an "end-to-end" run without human involvement to move the process from step-to-step and machine-to-machine.
| |
|
| |
|
| =Bootstrap= | | =Bootstrap= |
|
| |
|
| [http://mxr.mozilla.org/seamonkey/source/tools/release/ Bootstrap] is a simple Perl framework intended to take the formerly manual release process and automate it, with as little change to the process as possible. | | [[Build:Release Automation:Bootstrap|Bootstrap]] is a simple Perl framework intended to take the formerly manual release process and automate it, with as little change to the process as possible. |
|
| |
|
| Bootstrap is invoked using the "release" command, and supports a set of high-level "steps":
| | =Buildbot= |
|
| |
|
| <b>Tag</b> - tag, branch, apply version bumps to all relevant files.<br>
| | [http://buildbot.net Buildbot] is a continuous integration tool, similar to Tinderbox but written in Python as a client/server Twisted application. |
| <b>TinderConfig</b> - generate tinderbox config files (mozconfig/tinder-config.pl)<br>
| |
| <b>Build</b> - invoke Tinderbox client to create and en-US build and publish to FTP<br>
| |
| <b>Source</b> - create a source tarball and push it to FTP<br>
| |
| <b>Repack</b> - invoke Tinderbox client to create localized versions of en-US build and publish to FTP<br>
| |
| <b>PatcherConfig</b> - create a [http://mxr.mozilla.org/seamonkey/source/tools/patcher/ Patcher] config file for generating updates<br>
| |
| <b>Updates</b> - invoke Patcher to create partial updates and [http://wiki.mozilla.org/AUS AUS] configuration<br>
| |
| <b>Stage</b> - create a staging area and rename files for release<br>
| |
| <b>Sign</b> - not implemented<br>
| |
|
| |
|
| ==Bootstrap Steps==
| | We have a vendor branch in [http://mxr.mozilla.org/mozilla/source/tools/buildbot/ mozilla/tools/buildbot], based on Buildbot's 0.7.5 release. |
|
| |
|
| A Bootstrap "step" must implement 2 required methods:
| | [http://wiki.mozilla.org/ReferencePlatforms/BuildBot Mozilla-specific Buildbot install instructions] |
|
| |
|
| <b>Execute</b> - carry out the actual function of the step, e.g. Build<br>
| | [http://buildbot.net/trac/wiki/UserManual Buildbot user manual] |
| <b>Verify</b> - run an automated test<br>
| |
| | |
| Additionally, there are 2 optional methods:
| |
| | |
| <b>Push</b> - upload the appropriate changes for testing, e.g. upload build to FTP<br>
| |
| <b>Announce</b> - send an email announcing that the step has finished.<br>
| |
|
| |
|
| ==Using Bootstrap== | | =Current status= |
|
| |
|
| If the "release" command is invoked with no parameters, it will attempt to start at the first step and call the methods in this order:
| | This system is used for all current Firefox branches. Public documentation for each release is posted under the "Build" links on the [[Releases]] page. |
|
| |
|
| # Execute
| | All configs are checked into CVS under [http://mxr.mozilla.org/mozilla/source/tools/buildbot-configs/automation/ mozilla/tools/buildbot-configs/automation]. |
| # Verify
| |
| # Push
| |
| # Announce
| |
| | |
| As each step completes successfully, the next will be invoked.
| |
| | |
| There are several command-line options, shown by calling "release -h":
| |
| | |
| Usage: release [-l] [-s Step] [-o Step] [-e | -v | -p | -a] [-h]
| |
| -l list all Steps
| |
| -s start at Step
| |
| -o only run one Step
| |
| -e only run Execute
| |
| -v only run Verify
| |
| -p only run Push
| |
| -a only run Announce
| |
| -h this usage message
| |
| | |
| For example, to only run the Push method on the Build step:
| |
| | |
| ./release -o Build -p
| |
|
| |
|
| =Roles and resource requirements= | | =Roles and resource requirements= |
| Line 86: |
Line 45: |
| * "linux/mac/win32 firefox builders" | | * "linux/mac/win32 firefox builders" |
| ** builds firefox and pushes for QA | | ** builds firefox and pushes for QA |
| ** needs 2GB memory, 6GB storage (each) | | ** l10n/update verification |
| | ** needs 2GB memory, 10GB storage (each) |
| *** e.g. prometheus-vm:/builds/tinderbox/Fx-Mozilla1.8-Release/ | | *** e.g. prometheus-vm:/builds/tinderbox/Fx-Mozilla1.8-Release/ |
| * "updates builder" | | * "updates builder" |
| Line 99: |
Line 59: |
| ** e.g. /opt/aus2/incoming/3/Firefox/2.0.0.4/, /opt/aus2/snippets/staging/20070523-Fx-2.0.0.4/, /opt/aus2/snippets/backup/20070611-1-pre-20070611-Fx-2.0.0.4.tar.bz2 | | ** e.g. /opt/aus2/incoming/3/Firefox/2.0.0.4/, /opt/aus2/snippets/staging/20070523-Fx-2.0.0.4/, /opt/aus2/snippets/backup/20070611-1-pre-20070611-Fx-2.0.0.4.tar.bz2 |
|
| |
|
| =Buildbot= | | =Updating Staging release version= |
| | | * Bump config versions in mozilla/tools/release/Makefile, mozilla/tools/configs/fx-moz18-staging-bootstrap.cfg, mozilla/tools/buildbot-configs/automation/staging/master.cfg e.g. {{bug|407672}} |
| We have a vendor branch in [http://mxr.mozilla.org/mozilla/source/tools/buildbot/ mozilla/tools/buildbot], based on Buildbot's 0.7.5 release.
| |
| | |
| [http://buildbot.net Buildbot home page]
| |
| | |
| [http://wiki.mozilla.org/ReferencePlatforms/BuildBot Mozilla-specific Buildbot install instructions]
| |
| | |
| [http://buildbot.net/trac/wiki/UserManual Buildbot user manual]
| |
| | |
| =Notes on staging setup=
| |
| | |
| Buildbot master basedir is ~buildmaster/TestBot
| |
| | |
| The bootstrap.cfg is pulled from the master dir.
| |
| | |
| Slaves basedirs are in cltbld's home directory on the appropriate machine, e.g. ~cltbld/linux-slave1
| |
| | |
| Changes can be inserted with "buildbot sendchange" on the master e.g.:
| |
| buildbot sendchange --master=localhost:9989 -u rhelmer -m"latest bootstrap from CVS" test
| |
| | |
| Bootstrap uses a local CVS mirror, and the "tag", "source", "updates", and "stage" builders are run by a local buildslave.
| |
| | |
| The bootstrap [http://mxr.mozilla.org/mozilla/source/tools/release/Makefile Makefile] has the following targets:
| |
| | |
| * stage/clean_stage | |
| ** create/remove basic fileserver/tag/source/updates/stage environment
| |
| * cvsmirror/clean_cvsmirror
| |
| ** create/remove cvsmirror in /builds/cvsmirror
| |
| | |
| These targets are hard-coded to prepare for a 2.0.0.4 release.
| |
| | |
| There must be "cltbld" and "symbols" accounts on the staging FTP server that the build machines' cltbld accounts can connect to via SSH without a password.
| |
| | |
| * must accept staging-build-console's hostkey via this SSH tunnel:
| |
| | |
| * set up staging FTP server
| |
| mkdir /home/ftp /builds /data/cltbld
| |
| chown cltbld /home/ftp /builds/ /data/cltbld
| |
| cvs co /mofo/release/stage/ to /data/cltbld/bin
| |
| groupadd firefox
| |
| | |
| * set up staging AUS server
| |
| # TODO - auto-update
| |
| mkdir -p /opt/aus2/snippets/staging/backup /opt/aus2/incoming /opt/aus2/app
| |
| | |
| # check out aus2
| |
| cd /opt/aus2/
| |
| cvs -d /builds/cvsmirror/cvsroot/ co -d app/ -r AUS2_PRODUCTION mozilla/webtools/aus/xml
| |
| cd app && ln -s ../incoming ./data
| |
|
| |
| # install apache
| |
| yum install httpd
| |
| | |
| =Production setup HOWTO for linux/mac/win32=
| |
| | |
| * build-console setup
| |
| ** check out /mofo/release/stage to /data/cltbld/bin
| |
| *** ''NOTE - this is for the firefox-src-tarball-nobuild script, which checks out a tag from CVS and creates a source archive. This should be reimplemented in the [http://mxr.mozilla.org/mozilla/source/tools/release/Bootstrap/Step/Source.pm bootstrap Source step]''
| |
| | |
| * (Win32/Mac only) install Config::General
| |
| cd /tools/dist
| |
| wget http://search.cpan.org/CPAN/authors/id/T/TL/TLINDEN/Config-General-2.33.tar.gz
| |
| tar xfvz Config-General-2.33.tar.gz
| |
| cd Config-General-2.33
| |
| perl Makefile.PL
| |
| | |
| its ok to ignore the warning from "perl Makefile.PL":
| |
| Warning: the following files are missing in your kit:
| |
| t/test.rc.out
| |
| | |
| sudo make install
| |
| | |
| * (Linux only) prepend custom GCC to the path in ~/.bash_profile
| |
| export PATH="/usr/gcc-3.3.2rh/bin:/opt/local/bin:/tools/buildbot/bin:/tools/twisted/bin:/tools/twisted-core/bin:$PYTHONHOME/bin:$PATH"
| |
| | |
| * create logs dir
| |
| $ mkdir -p /tools/dist/logs
| |
| $ mkdir -p /builds/logs
| |
| | |
| * (Mac only) Install 7z. You can download it. Or you can copy it from bm-xserve01, which is what we did here. By putting the file in /usr/bin, it is automatically on the PATH of cltbld's .profile.
| |
| | |
| $ cd /usr/bin
| |
| $ sudo rsync -av cltbld@bm-xserve01.build.mozilla.org:/usr/local/bin/7z .
| |
| | |
| * look for Tinderbox directory
| |
| #linux: if tinderbox name is not "Fx-Mozilla1.8-Release" exactly, symlink it
| |
| ln -s /builds/tinderbox/Fx-Mozilla1.8-release /builds/tinderbox/Fx-Mozilla1.8-Release
| |
| | |
| Check out tinderbox configs:
| |
| # win32
| |
| cvs -d cltbld@cvs.mozilla.org:/cvsroot co -r MOZILLA_1_8_BRANCH_release -d tinderbox-configs mozilla/tools/tinderbox-configs/firefox/win32
| |
| # linux
| |
| cvs -d cltbld@cvs.mozilla.org:/cvsroot co -r MOZILLA_1_8_BRANCH_release -d tinderbox-configs mozilla/tools/tinderbox-configs/firefox/linux
| |
| # macosx
| |
| cvs -d cltbld@cvs.mozilla.org:/cvsroot co -r MOZILLA_1_8_BRANCH_release -d tinderbox-configs mozilla/tools/tinderbox-configs/firefox/macosx
| |
| | |
| | |
| * set up Tinderbox l10n build directory
| |
| # linux
| |
| cd /builds/tinderbox/
| |
| # win32
| |
| cd /cygdrive/c/builds/tinderbox/
| |
| | |
| mkdir Fx-Mozilla-1.8-l10n-Release
| |
| cd Fx-Mozilla-1.8-l10n-Release
| |
| ../mozilla/tools/tinderbox/install-links
| |
| rm build-seamonkey.pl
| |
| ln -s ../mozilla/tools/tinderbox/build-firefox.pl .
| |
| ln -s build-firefox.pl build-seamonkey.pl
| |
| rm post-mozilla.pl
| |
| ln -s post-mozilla-release.pl post-mozilla.pl
| |
| | |
| Check out tinderbox configs:
| |
| # win32
| |
| cvs -d cltbld@cvs.mozilla.org:/cvsroot co -r MOZILLA_1_8_BRANCH_l10n_release -d tinderbox-configs mozilla/tools/tinderbox-configs/firefox/win32
| |
| # linux
| |
| cvs -d cltbld@cvs.mozilla.org:/cvsroot co -r MOZILLA_1_8_BRANCH_l10n_release -d tinderbox-configs mozilla/tools/tinderbox-configs/firefox/linux
| |
| # macosx
| |
| cvs -d cltbld@cvs.mozilla.org:/cvsroot co -r MOZILLA_1_8_BRANCH_l10n_release -d tinderbox-configs mozilla/tools/tinderbox-configs/firefox/macosx
| |
| | |
| | |
| ln -s tinderbox-configs/mozconfig .
| |
| ln -s tinderbox-configs/tinder-config.pl .
| |
| | |
| * [http://wiki.mozilla.org/ReferencePlatforms/BuildBot/Linux Install buildbot]
| |
| * running as "cltbld", install slave
| |
| #linux
| |
| $ cd ~
| |
| $ buildbot create linux-slave1 build-console.build.mozilla.org:9989 linux-slave1 password
| |
| #win32
| |
| c:\\buildtools\\python24\\scripts\\buildbot create-slave c:\\win32-slave1 build-console.build.mozilla.org:9989 win32-slave1 password
| |
| | |
| * edit the admin and host pages in ~/linux-slave1/info/
| |
| | |
| * start slave
| |
| #linux
| |
| buildbot start /home/cltbld/linux-slave1
| |
| # win32
| |
| c:\\buildtools\\python24\\scripts\\buildbot start c:\\win32-slave1
| |
| | |
| ==Just for testing==
| |
| | |
| * build-console
| |
| ** use "stage" target in [http://mxr.mozilla.org/mozilla/source/tools/release/Makefile#7 bootstrap's Makefile]
| |
| | |
| * Move prod ssh keys out of the way, and copy in "staging" keys:
| |
| cd ~
| |
| mv ~/.ssh ~/ssh.prod
| |
| scp cltbld@staging-prometheus-vm:~/.ssh/id_rsa .ssh/
| |
| | |
| * Move prod tinderbox-configs and put staging-build-console in Root:
| |
| # win32
| |
| cd /cygdrive/c/builds/tinderbox/Fx-Mozilla-1.8-Release
| |
| # linux
| |
| cd /builds/tinderbox/Fx-Mozilla-1.8-Release
| |
| | |
| cp -rp tinderbox-configs tinderbox-configs.prod
| |
| # change root to cltbld@staging-build-console.build.mozilla.org:/builds/cvsmirror/cvsroot
| |
| vi tinderbox-configs/CVS/Root
| |
| | |
| Same for l10n tinderbox build directories:
| |
| | |
| # win32
| |
| cd /cygdrive/c/builds/tinderbox/Fx-Mozilla-1.8-l10n-Release
| |
| # linux
| |
| cd /builds/tinderbox/Fx-Mozilla-1.8-l10n-Release
| |
| | |
| cp -rp tinderbox-configs tinderbox-configs.prod
| |
| # change root to cltbld@staging-build-console.build.mozilla.org:/builds/cvsmirror/cvsroot
| |
| vi tinderbox-configs/CVS/Root
| |
| | |
| * /data/cltbld/bin/firefox-src-tarball-nobuild has a hardcoded CVSROOT; change it to cltbld@staging-build-console.build.mozilla.org:/builds/cvsmirror/cvsroot
| |
| | |
| =Production changes=
| |
| ==Changing roles==
| |
| | |
| # move to dedicated machines, e.g. production-prometheus-vm
| |
| # CVS tag on linux slave or on build-console? ''build-console''
| |
| # l10nverify on mac slave ''ok, need to fix "unpack all xpis bug"''
| |
| # Mac - is identical hardware req'd? What happens if prod hardware dies? fireball still worked on, scarce PPC hardware options.
| |
| | |
| Available PPCs:
| |
| | |
| * 01 - head node
| |
| * 02 - production
| |
| * 03 - given to community
| |
| * 04 - 1.8.0
| |
| * 05 - dead
| |
| * 06 - given to community
| |
| * fireball - unknown
| |
| | |
| <strike>''discussed: planned switch to Intel''.</strike>
| |
| Later, more PPC hardware brought online, so decided to not switch to Intel as part of the automation rollout.
| |
|
| |
|
| ==Staging/Production Buildbot master differences==
| | * As cltbld@staging-build-console, disable cltbld's nightly cronjob to prevent accidently starting mid-way through update. |
|
| |
|
| # Signing - prod waits for signed bits, stage fakes w/ symlink ''ok''
| | * As cltbld@staging-build-console, refresh cvsmirror by doing: |
| # Bootstrap - prod pulls tag e.g. RELEASE_AUTOMATION_M5, staging pulls tip ''ok''
| | cd /home/cltbld/mozilla/tools/release |
| | cvs up |
| | export CVS_RSH="/home/cltbld/ssh_prod.sh" |
| | make cvsmirror |
|
| |
|
| ==Outstanding issues==
| | * Update buildbot configs. These are symlinked from the buildbot-configs checkout (of mozilla/tools/buildbot-configs/automation/staging/). |
|
| |
|
| # How to handle bootstrap logs.. remove them between runs? Don't want accumulation on slaves ''remove at start''
| | As buildmaster@staging-build-console: |
| # How to do mock release.. fake version (e.g. 1.2.3.4)? Early 2.0.0.7, that we know we won't release? ''2007 rc1''
| | # pull configs and restart buildbot |
| # "Source" and "Staging" steps - install a buildslave on stage, or stage everything on build-console? ''use build-console''
| | cd /home/buildmaster/TestBot |
| # Make sure QA checks e.g. top 5 extensions after Mac Intel switch | | buildbot stop `pwd` |
| | cd buildbot-configs && cvs up && cd ../ |
| | buildbot start `pwd` |
|
| |
|
| =Caveats=
| | As cltbld@staging-build-console: |
| | # update mofo scripts |
| | cd /data/cltbld/bin |
| | cvs up |
|
| |
|
| ==Manual steps==
| | * Remove and re-checkout tinderbox-configs directories on build machines. Since the mirror takes checkins, the local checkout thinks that it has a higher revision and won't update to the now-refreshed mirror. |
|
| |
|
| NOTE - manual steps should be done in this order
| | # e.g. linux |
| | cd /builds/tinderbox/Fx-Mozilla1.8-release |
| | rm -rf tinderbox-configs |
| | cvs -d :ext:cltbld@staging-build-console.build.mozilla.org:/builds/cvsmirror/cvsroot co -d tinderbox-configs -r MOZILLA_1_8_BRANCH_release mozilla/tools/tinderbox-configs/firefox/linux |
|
| |
|
| # bootstrap configuration
| | For l10n use the MOZILLA_1_8_BRANCH_l10n_release branch. |
| # kicking off buildbot ("buildbot sendchange ...")
| |
| # update verification config (working on this in [https://bugzilla.mozilla.org/show_bug.cgi?id=373995 bug 373995]. For now, need to modify and check in the [http://mxr.mozilla.org/mozilla/source/testing/release/updates/moz18-firefox-linux.cfg appropriate] [http://mxr.mozilla.org/mozilla/source/testing/release/updates/moz18-firefox-mac.cfg update] [http://mxr.mozilla.org/mozilla/source/testing/release/updates/moz18-firefox-win32.cfg configs], after all en-US builds but before updates
| |
| # win32 signing, after win32 l10n repack but before updates
| |
| # final installer signing
| |
|
| |
|
| ==Bugs==
| | * re-enable cltbld's nightly cronjob |
|
| |
|
| * Need to use cvs (in master.cfg) from ShellCommand to make sure that we always use the proper bootstrap tag
| | =Setup notes (historical)= |
| * (enhancement)(needs bug filed) should set buildbot up to mail based on any failures, currently just depend on bootstrap
| | * [[Build:Release Automation:Notes on Staging Setup|Notes on Staging Setup]] |
| * (needs bug filed) "scp -r" does not work on pacifica-vm; needed for l10n
| | * [[Build:Release Automation:Notes on Production Setup|Notes on Production Setup]] |
| * (needs bug filed) FTP area keeps getting set read-only; could be a bug in the rsync from the build machines, or maybe in the initial staging FTP area setup?
| | * [[Build:Release Automation:Trunk|Notes on Trunk Automation Setup]] |
| ** (build) permissions on all ${os}_info.txt files were read-only user
| |
| ** (updates) permissions on AUS config (snippets) and partial MARs were wrong
| |
| ** (stage) permissions problems for non-stage-merged dirs; did 775 for dirs an 664 for files. group perms seem ok, and batch-skel/stage-merged ok as well.
| |
| * (needs bug filed) bootstrap needs to automatically sync with stage
| |
| ** build, repack, sign, updates, stage
| |
| * ({{bug|372746}}) Automatically configure bouncer
| |
| * ([https://bugzilla.mozilla.org/show_bug.cgi?id=394034 bug 394034]) in private repos, in /mofo/release/stage/firefox-src-tarball-nobuild, there is a script that is called in the "source" step. Has hardcoded CVSROOT which needs to be updated to use ":ext:cltbld@staging-build-console.build.mozilla.org:/builds/cvsmirror/cvsroot"
| |
| ** might be better to just delete this script and create a makefile target to tar up files. This is the only file we use from the private repo (we think), so if this file is deleted, we can stop using the private repo.
| |
| ** also this is currently a problem because build-console cannot access anonymous CVS
| |
| * ([https://bugzilla.mozilla.org/show_bug.cgi?id=373995 bug 373995]) l10n needs the URL it downloads builds from to be configurable as well
| |
| * ([https://bugzilla.mozilla.org/show_bug.cgi?id=373995 bug 373995]) update verification needs config file; needs to be rewritten to use patcher.cfg | |
| * buildbot default timeout too short. 5sec isnt always enough, and you can get a "timed out" message in the slave logs, even though slave started "normally". [http://buildbot.net/trac/ticket/68 buildbot bug#68].
| |
| * sometimes buildmaster sees buildslave correctly, confirms ping ok, but never assigns pending work to the slave. Doing "buildmaster refresh" is not enough, you need to do "buildmaster stop/start". Restarting the slave does not help. [http://buildbot.net/trac/ticket/85 buildbot bug#85]
| |
| * on win32, console output is not logged (goes to the DOS console running buildbot :( )
| |
| * file buildbot bug to handle kill on win32. Add details linking to bsmedberg fix. [http://buildbot.net/trac/ticket/77 buildbot bug#77]
| |
| * link to history for old builds at bottom of page (ala tinderbox server). [http://buildbot.net/trac/ticket/67 buildbot bug#67] | |
| * meta-refresh tag for waterfall page [http://buildbot.net/trac/ticket/69 buildbot bug#69]
| |
| * buildbot UI to contain way to force build dependent steps instead of just doing current step. [http://buildbot.net/trac/ticket/78 buildbot bug#78]
| |
| * When using the CVS Source step on a Mac OSX slave, if a CVS directory is found on the path, buildbot will attempt to use it as if it were a CVS binary.
| |
| * steps which start within a few seconds of each other show as same start time on waterfall page [http://buildbot.net/trac/ticket/88 buildbot bug#88] | |
| * (needs bug filed) tinderbox symbol server should be configurable
| |
| ** temp workaround: tinderbox Makefile.in needs to be hacked:
| |
| FC_TUNNEL = ssh -$(FC_SSH_VERSION) -f -L 8080:hal:80 $(LSSH_USER)staging-build-console.build.mozilla.org sleep 20
| |
| SYM_TUNNEL = ssh -$(SYM_SSH_VERSION) -f -L 2222:localhost:22 $(LSSH_USER)staging-build-console.build.mozilla.org sleep 20
| |
| * (needs bug filed) should report on mirror saturation after release
| |