Skip to content

Instantly share code, notes, and snippets.

@nohtyp
Last active June 25, 2018 01:28
Show Gist options
  • Save nohtyp/1bd4d4c39eaa954fb3158c17dafa9665 to your computer and use it in GitHub Desktop.
Save nohtyp/1bd4d4c39eaa954fb3158c17dafa9665 to your computer and use it in GitHub Desktop.
Jenkins RPM build script
#!/bin/bash -x
NEWSPEC_FILE=$RPM_BUILD_DIR/$NEWSPEC_PATH/$NEWSPEC_FILE
APP_DIR=$APP_DIR
TEMP_FILES='install_dirs files'
URL=$URL
DELETE_DIRS=../delete_dirs
SOURCE_DIR=$RPM_BUILD_DIR/$NEWSPEC_SOURCE
SUMMARY=$SUMMARY
LICENSE=$LICENSE
function CreateValue()
{
MyVal=$1
if [ $(echo $MyVal | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g') = "atlassian-jira-software" ]
then
export VALUE=`echo $MyVal |sed 's/^[a-z-]*//'|sed 's/^[0-9.-]*//'`
else
echo "This is MyVal: $MyVal"
export VALUE=`echo $MyVal |sed 's/^[a-z-]*//'`
fi
}
function CreateSpec()
{
mkdir -p "$DELETE_DIRS"
echo "Creating spec file $NEWSPEC_FILE"
touch "$NEWSPEC_FILE"
}
function CleanUp()
{
MyCleanup=$1
rm "$NEWSPEC_FILE" 2> /dev/null
rm "$MyCleanup" 2> /dev/null
rm "$TEMP_FILES" 2>/dev/null
}
function CreateSource()
{
MySource=$1
echo "$MySource.tar is the file name"
export SOURCE="$MySource".tar
}
function CreateSetup()
{
MySetUp=$1
if [ $(echo $MyVal | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g') = "atlassian-jira-software" ]
then
echo %setup -n %{name}-%{version}-"${VALUE}" >> $NEWSPEC_FILE
else
echo %setup -n %{name}-%{version} >> $NEWSPEC_FILE
fi
}
function Extract()
{
for z in $(ls -1)
do
echo "$z"
if [ -f "$z" ] && [ "${z: -4}" = ".tar" ] || [ "${z: -7}" = ".tar.gz" ]
then
echo "Un-tarring file $z in $(pwd)"
tar -xvf "$z"
rm "$z"
elif [ -f "$z" ] && [ "${z: -4}" = ".zip" ]
then
echo "Un-zipping file $z in $(pwd)"
unzip "$z"
rm "$z"
else
echo "$z is not a file that can be unpacked.."
fi
done
}
function CheckJRE()
{
for mydir in $(ls -1)
do
if [ ${mydir:0:3} = "jre" ] && [ -d "$mydir" ]
then
echo "Renaming file"
export MYTAR=$(echo $mydir | sed 's/jre/jre-/g')
mv $mydir $MYTAR
echo "moved $mydir to $MYTAR"
fi
done
}
function CreateTar()
{
TAR_CREATE=$1
echo "Tarring up file $TAR_CREATE"
tar -cf $TAR_CREATE.tar $TAR_CREATE
echo "Moving $TAR_CREATE.tar to $SOURCE_DIR"
mv -f $TAR_CREATE.tar $SOURCE_DIR
}
function CreateName()
{
MyName=$1
if [ ${MyName:0:3} = "jre" ]
then
echo "Name: " ${MyName:0:3} >> $NEWSPEC_FILE
echo "AutoReqProv: no" >> $NEWSPEC_FILE
else
echo "Name: " $(echo $i |grep -o "^\S*[[:digit:]]" |awk -F '-[[:digit:]]' '{print $1}') >> $NEWSPEC_FILE
fi
}
function CreateVersion()
{
MyVersion=$1
if [ ${MyVersion:0:3} = "jre" ]
then
#this regex will get version number
echo "Version: " $(echo "$MyVersion"|sed 's/^[a-z-]*//') >> $NEWSPEC_FILE
else
echo "Version: " $(echo "$MyVersion" |egrep -o "([0-9]{1,}\.)+[0-9]{1,}") >> $NEWSPEC_FILE
fi
}
function CreatePost()
{
POST=$1
if [ ${POST:0:3} = "jre" ]
then
STANDARD_NAME=${POST:0:3}
else
STANDARD_NAME=$(echo "$POST"| sed 's/\W//g')
fi
if [ $(echo $POST | awk -F '-' '{print NF}') -eq 2 ]
then
export USER=$(echo $POST | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g')
else
export USER=$(echo $POST | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g' | awk -F '-' '{print $2}')
fi
echo '%post' >> $NEWSPEC_FILE
echo case '"$1"' in >> $NEWSPEC_FILE
echo ' 1)' >> $NEWSPEC_FILE
echo " if [ -L "$APP_DIR/$USER/current" ]" >> $NEWSPEC_FILE
echo ' then' >> $NEWSPEC_FILE
echo ' echo The symbolic link previously create..Recreating old symlink' >> $NEWSPEC_FILE
echo ' rm ' "$APP_DIR/$USER/current" >> $NEWSPEC_FILE
echo ' ln -s '"$APP_DIR/$USER/$POST" "$APP_DIR/$USER/current" >> $NEWSPEC_FILE
echo ' else' >> $NEWSPEC_FILE
echo ' echo "This is from post value 1: $1"' >> $NEWSPEC_FILE
echo ' ln -s '"$APP_DIR/$USER/$POST" "$APP_DIR/$USER/current" >> $NEWSPEC_FILE
echo ' fi' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 2)' >> $NEWSPEC_FILE
echo ' echo "This is from post value 2: $1"' >> $NEWSPEC_FILE
echo ' ln -s '"$APP_DIR/$USER/$POST" "$APP_DIR/$USER/current" >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo esac >> $NEWSPEC_FILE
}
function CreatePostUn()
{
POSTUN=$1
if [ ${POSTUN:0:3} = "jre" ]
then
STANDARD_NAME=${POSTUN:0:3}
else
STANDARD_NAME=$(echo "$POSTUN"| sed 's/\W//g')
fi
echo '%postun' >> $NEWSPEC_FILE
echo case '"$1"' in >> $NEWSPEC_FILE
echo ' 0)' >> $NEWSPEC_FILE
echo ' echo "This is postun value 0: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 1)' >> $NEWSPEC_FILE
echo ' echo "This is postun value 1: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 2)' >> $NEWSPEC_FILE
echo ' echo "This is postun value 2: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo esac >> $NEWSPEC_FILE
}
function CreatePreUn()
{
PREUN=$1
if [ ${PREUN:0:3} = "jre" ]
then
STANDARD_NAME=${PREUN:0:3}
else
STANDARD_NAME=$(echo "$PREUN"| sed 's/\W//g')
echo $STANDARD_NAME
fi
echo '%preun' >> $NEWSPEC_FILE
echo case '"$1"' in >> $NEWSPEC_FILE
echo ' 0)' >> $NEWSPEC_FILE
echo ' echo "This is from preun value 0: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 1)' >> $NEWSPEC_FILE
echo ' echo "This is from preun value 1: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 2)' >> $NEWSPEC_FILE
echo ' echo "This is from preun value 2: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo esac >> $NEWSPEC_FILE
}
function CreatePre()
{
PRE=$1
if [ ${PRE:0:3} = "jre" ]
then
STANDARD_NAME=${PRE:0:3}
else
STANDARD_NAME=$(echo "$PRE"| sed 's/\W//g')
echo $STANDARD_NAME
fi
if [ $(echo $PRE | awk -F '-' '{print NF}') -eq 2 ]
then
export USER=$(echo $PRE | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g')
else
export USER=$(echo $PRE | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g' | awk -F '-' '{print $2}')
fi
if [ ${PRE:0:3} = "jre" ]
then
echo '%pre' >> $NEWSPEC_FILE
echo case '"$1"' in >> $NEWSPEC_FILE
echo ' 1)' >> $NEWSPEC_FILE
echo ' echo "This is from pre value 1: $1"' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 2)' >> $NEWSPEC_FILE
echo ' echo "This is from pre value 2: $1"' >> $NEWSPEC_FILE
echo ' rm ' "$APP_DIR/$USER/current" >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo esac >> $NEWSPEC_FILE
else
echo '%pre' >> $NEWSPEC_FILE
echo case '"$1"' in >> $NEWSPEC_FILE
echo ' 1)' >> $NEWSPEC_FILE
echo ' echo "This is from pre value 1: $1"' >> $NEWSPEC_FILE
echo " if [ \$(grep $USER /etc/passwd | awk -F ':' '{print \$1}') == $USER ]" >> $NEWSPEC_FILE
echo ' then' >> $NEWSPEC_FILE
echo " echo "User $USER was previously created.."" >> $NEWSPEC_FILE
echo ' else' >> $NEWSPEC_FILE
echo " echo "Creating user account $USER.."" >> $NEWSPEC_FILE
echo " useradd -m -r -d /home/$USER -s /bin/false $USER" >> $NEWSPEC_FILE
echo ' fi' >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo ' 2)' >> $NEWSPEC_FILE
echo ' echo "This is from pre value 2: $1"' >> $NEWSPEC_FILE
echo " echo "Shutting down $USER server.."" >> $NEWSPEC_FILE
echo " $APP_DIR/$USER/current/bin/shutdown.sh" >> $NEWSPEC_FILE
echo ' sleep 10' >> $NEWSPEC_FILE
echo ' rm ' "$APP_DIR/$USER/current" >> $NEWSPEC_FILE
echo ' ;;' >> $NEWSPEC_FILE
echo esac >> $NEWSPEC_FILE
fi
}
Extract
CheckJRE
echo "This is IFS before the changes $IFS"
export IFS=$'\n'
for i in $(ls -1)
do
if [[ -d "$i" ]]; then
CleanUp "$i"
CreateSpec
CreateSource "$i"
CreateValue "$i"
if [ $(echo "$i" | awk -F '-' '{print NF}') -eq 2 ]
then
export USER=$(echo "$i" | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g')
else
export USER=$(echo "$i" | sed 's/[a-z-]*$//g' |sed 's/-[[:digit:]].*//g' | awk -F '-' '{print $2}')
fi
echo '%install' > install_dirs;for g in $(find "$i" -type d);do echo 'install -d -m 0755 $RPM_BUILD_ROOT'"$APP_DIR/$USER"'/'"$g" >> install_dirs;done
for h in $(find "$i" -type f);do echo "install -m 0755 "'$RPM_BUILD_DIR/'"'$h'" '$RPM_BUILD_ROOT'"$APP_DIR/$USER"'/'"'$h'" >> install_dirs;done
echo "%files" > files;for j in $(find "$i" -type d);do echo "$APP_DIR/$USER/$j" >> files;done
echo >> $NEWSPEC_FILE
CreateName "$i"
CreateVersion "$i"
echo 'Release: 1%{?dist}' >> $NEWSPEC_FILE
echo "Summary: $SUMMARY" >> $NEWSPEC_FILE
echo "License: $LICENSE" >> $NEWSPEC_FILE
echo "URL: $URL" >> $NEWSPEC_FILE
echo "Source0: $SOURCE" >> $NEWSPEC_FILE
echo '%description' >> $NEWSPEC_FILE
echo "$DESCRIPTION" >> $NEWSPEC_FILE
echo >> $NEWSPEC_FILE
echo '%clean' >> $NEWSPEC_FILE
echo >> $NEWSPEC_FILE
echo '%prep' >> $NEWSPEC_FILE
echo >> $NEWSPEC_FILE
CreateSetup "$i"
echo >> $NEWSPEC_FILE
cat install_dirs >> $NEWSPEC_FILE
echo >> $NEWSPEC_FILE
cat files >> $NEWSPEC_FILE
echo >> $NEWSPEC_FILE
CreatePre "$i"
echo >> $NEWSPEC_FILE
CreatePreUn "$i"
echo >> $NEWSPEC_FILE
CreatePost "$i"
echo >> $NEWSPEC_FILE
CreatePostUn "$i"
CreateTar "$i"
else
continue
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment