You are browsing a read-only backup copy of Wikitech. The live site can be found at wikitech.wikimedia.org

Heterogeneous deployment/Train deploys

From Wikitech-static
< Heterogeneous deployment
Revision as of 20:52, 6 March 2018 by imported>Thcipriani (→‎Update roadmap: we're on 1.31 now)
Jump to navigation Jump to search
Train wreck at Montparnasse 1895.jpg

Breakage

There will be times when this process does not go smoothly. There are guidelines for what do to when that happens.

In general, if there is an unexplained error that occurs within 1 hour of a train deployment — always roll back the train. Rolling back the train to eliminate it as the cause of unexplained breakage can be especially important if there are many ongoing possible causes for issues as this helps to eliminate one of those causes as the source of problems.

Tuesday: New branch creation and deploy

Create the new branch in gerrit

The new branch can be created in Gerrit from anywhere. It is often faster to do this step on a host in the cluster to minimize the time needed to clone from gerrit.

The script is run as your regular user member of the wikidev group (as of Feb 16th 2016). You have to configure git:

  • git config --global user.name "FIRST NAME LAST NAME"
  • git config --global user.email "youremail@example.org"

Create a .netrc (on Windows _netrc) file in your home directory with the following content:

machine gerrit.wikimedia.org login myawesomeusername password MySuper/SecretPassword!

This username and password can obtained from Gerrit.

  • git clone https://gerrit.wikimedia.org/r/p/mediawiki/tools/release
  • cd release/make-wmf-branch
  • ./make-wmf-branch -n VERSION -o master
    • (e.g. php make-wmf-branch -n 1.27.0-wmf.9 -o master)

Clone new branch

  • On tin, to create a new /srv/mediawiki-staging/php-VERSION directory run:
    • cd /srv/mediawiki-staging && scap prep VERSION
    • (e.g. scap prep 1.29.0-wmf.7)

Apply security patches

  • Patches should be named sequentially in the order that they will cleanly apply (e.g. 01-T123.patch, 02-T321.patch)
  • Check and apply each patch in both /srv/patches/VERSION/core and /srv/patches/VERSION/extensions/NAME to the new core checkout and extensions, respectively.
    • You can check a core patch to see if it will apply cleanly with git apply --check --3way /srv/patches/VERSION/core/XX-TXXX.patch
    • If the patch checks out, apply and commit it with git am --3way /srv/patches/VERSION/core/XX-TXXX.patch
    • If the patch fails to apply, investigate whether it's due to a conflict (git status) or the patch having been merged since the new branch cut (search git log for the commit, etc.). If it turns out to be the latter, remove the patch file from the /srv/patches/VERSION directory. If you need extra help, contact Chad (ostriches) or Darian (dapatrick) in IRC (#mediawiki_security connect).

Create patches to update wikiversions.json

  • Create group0 to VERSION patch
    • scap update-wikiversions group0 VERSION
      • (e.g. scap update-wikiversions group0 1.30.0-wmf.17)
    • git add wikiversions.json
    • git commit -m "Group0 to VERSION"
      • (e.g. git commit -m "Group0 to 1.27.0-wmf.9")

Send staged patches to gerrit for review

  • cd /srv/mediawiki-staging
  • git push origin HEAD:refs/for/master/VERSION
    • (e.g. git push origin HEAD:refs/for/master/1.27.0-wmf.9)

Discard changes to working directory and index on tin

  • cd /srv/mediawiki-staging
  • git reset --hard origin/master

Clean up old stuff

For all branches more than 30 days old, drop everything:

scap clean --delete 1.29.0-wmf.11

For all branches older than the currently active branch(es) and prior one, prune everything that's not a static asset (we need those for cached CSS/JS/etc):

scap clean 1.29.0-wmf.11

Sync to cluster and verify on testwiki

  • Edit /srv/mediawiki-staging/wikiversions.json and set testwiki to php-VERSION
    • Do not commit and push to gerrit, only make this change locally on the deployment server
  • Run scap to (re)build localization caches and sync changes across the cluster
    • scap sync "testwiki to php-VERSION and rebuild l10n cache"
  • Verify version change and l10n cache on testwiki
  • Revert local changes: git checkout -- wikiversions.json

Update deploy notes

Setup the tools you need to do this:

For the new branch and any branches that may have changed in the last week:

  • Check out the branch locally
    • git checkout wmf/VERSION
    • (e.g. git checkout wmf/1.24wmf4)
  • If you don't already have the previous branch checked out, do that as well
    • git checkout wmf/PREVIOUS-VERSION
    • (e.g. git checkout wmf/1.24wmf3)
  • Update the submodules
    • git submodule update --init --recursive
  • Run the change log generation and upload script
    • php path/to/make-deploy-notes/uploadChangelog.php wmf/VERSION
      • (e.g. php path/to/make-deploy-notes/uploadChangelog.php wmf/1.24wmf4)
  • Repeat for additional branches as needed

Wait for deploy window

All of the changes above can be done at any time prior to the actual deployment window. Depending on how practiced you are and where you choose to run commands (full clones of mediawiki-core from outside the cluster can take a while) the steps up to this point will typically take 45 to 90 minutes.

Switch group0 wikis to VERSION

  • Review and submit group0 to VERSION patch in gerrit
  • Wait for gerrit/zuul/jenkins to merge the patch(es)
  • Pull patch(es) to deployment server
    • cd /srv/mediawiki-staging
    • git fetch
  • Check diff to ensure it is what you expect
    • git diff HEAD..origin/master
  • Apply changes
    • git rebase origin/master
  • Sync the change across the cluster
    • scap sync-wikiversions "group0 to VERSION"
      • (e.g. scap sync-wikiversions "group0 to 1.24wmf4")
  • Verify that mediawikiwiki switched to the new version
  • Monitor irc and logstash and/or fatalmonitor for problems

Update roadmap

  • Change the Deployed to group (if you're using VisualEditor) or the 3rd parameter of the WMFReleaseTableRow template (if you're using the wikitext editor) to "0" (deployed to group0) the branch roadmap.

Wednesday: group0 to group1 deploy

  • Clone the MediaWiki release tools to your home directory on tin
  • Use the deploy-promote script inside ~/release/bin/ to update wikiversions.json
    • ~/release/bin/deploy-promote
      • Promote group1 from VERSION-1 to VERSION? Enter to continue, ctl-c to cancel:
    • The script automatically Code-Review +2 the patch in Gerrit. Once CI has merged it hit enter at the 2nd prompt:
      • Now wait for jenkins to merge the patch, then press enter to continue with git pull && scap sync-wikiversions
    • After the script run is complete, group1 wikis should be running VERSION

Thursday: group{0,1} to all deploy

Thursday deploy is very similar to the Wednesday deploy, the only difference in terms of procedure is the target group

  • Clone the MediaWiki release tools to your home directory on tin
  • Use ~/release/bin/deploy-promote all to update wikiversions.json
    • The script automatically send to Gerrit and Code-Review +2 the patch. Once CI has merged it, hit enter at the 2nd prompt:
      • Now wait for jenkins to merge the patch, then press enter to continue with git pull && scap sync-wikiversions
    • After the script run is complete, all wikis should be running VERSION