{ rené.winkelmeyer }

Automate the upgrade of Atlassian Stash on Linux

Jun 30, 2014
2 minutes

Upgrading existing software is sometimes cumbersome. Long checklists, validating pre-conditions, maintaining backups etc.

So is it with Atlassian Stash. Stash is an awesome software to manage your Git repositories. As Atlassian delivers often new releases it became tedious for me to upgrade our Stash installation.

I wrote a small bash script that now automates the process for me. The script does the following:

  • Read the Stash version number and download URL from a prompt
  • Downloads and unpacks the new version
  • stops Stash
  • deletes a previous existing backup folder
  • moves the current program directory to a backup location
  • creates a new program directory copies the new version into it
  • makes sure that file and folder permissions are set correctly
  • checks if the needed SQL library is in place
  • copies the previous server config file
  • set the environment
  • starts Stash

I’ve posted the script below. Check if you need to modify it for your own installation. There is no error handling (which probably should be in there). But hey, it worked several times. ;-)

[code lang=“bash”] #!/bin/bash # # This script updates Atlassian Stash on Linux # # Change the following parameters according if needed

# This parameter defines the download root folder for the new version DLLOCATION=/tmp/download/atlassian/stash # This parameter defines the root program folder (assuming that “stash” is the main program folder) ATLASSIAN_ROOT_DIR=/opt/atlassian/ # This parameter defines the data folder of Stash ATLASSIAN_STASH_DATA=/var/atlassian/application-data/stash

echo ############################ echo Stash Migration Script echo ############################ echo echo

echo Please enter the new version number: read VERSION

echo echo Please enter the dowload URI from the Atlassian website. read DL

echo echo Creating new Stash directory mkdir $DLLOCATION$VERSION/ echo echo echo Downloading new version. cd $DLLOCATION$VERSION wget $DL

echo Extracting new version tar xf atlassian-stash-$VERSION.tar.gz cd atlassian-stash-$VERSION

echo Stopping stash $ATLASSIAN_ROOT_DIR/stash/bin/stop-stash.sh

echo Removing old backup directory rm -rf $ATLASSIAN_ROOT_DIR/stash_old

echo Move current Stash directory as backup directory mv $ATLASSIAN_ROOT_DIR/stash $ATLASSIAN_ROOT_DIR/stash_old

echo Create new Stash directory mkdir $ATLASSIAN_ROOT_DIR/stash

echo Copy new Stash version cp -rp * $ATLASSIAN_ROOT_DIR/stash

echo Set user and group permissions chown -R stash $ATLASSIAN_ROOT_DIR/stash chgrp -R stash $ATLASSIAN_ROOT_DIR/stash

echo SQL-Lib directory verification if [ ! -d “$ATLASSIAN_ROOT_DIR/stash/lib”]; then mkdir $ATLASSIAN_ROOT_DIR/stash/lib fi cp -rp $ATLASSIAN_ROOT_DIR/stash_old/lib/mysql* $ATLASSIAN_ROOT_DIR/stash/lib/

echo Copy server config from backup cp -rp $ATLASSIAN_ROOT_DIR/stash_old/conf/server.xml $ATLASSIAN_ROOT_DIR/stash/conf

echo Set the Stash executable directory export STASH_HOME=$ATLASSIAN_STASH_DATA

echo Stash export JAVA_HOME=/usr/java/latest $ATLASSIAN_ROOT_DIR/stash/bin/start-stash.sh [/code]