Skip to content

Instantly share code, notes, and snippets.

@jorgepenacotarelo
Created December 12, 2013 08:48
Show Gist options
  • Save jorgepenacotarelo/7924980 to your computer and use it in GitHub Desktop.
Save jorgepenacotarelo/7924980 to your computer and use it in GitHub Desktop.
Generates Jenkins job from template for Mercurial repos
#!/bin/bash
set -e
[ "x${JENKINS_URL}" == "x" ] && JENKINS_URL=http://127.0.0.1/jenkins/
JENKINS_USER=YourJenkinsUser
JENKINS_PASS=YourPass
XML=`which xmlstarlet` || { echo "please install xmlstarlet and try again"; exit 2; }
isJavaAvail(){ # find java
if [ "x${JAVA_HOMa}" != "x" ]; then JAVA_CMD="${JAVA_HOME}/bin/java/"
else
for candidate in /etc/alternatives/java /usr/lib/jvm/java-1.6.0/bin/java /usr/lib/jvm/jre-1.6.0/bin/java /usr/lib/jvm/java-1.5.0/bin/java /usr/lib/jvm/jre-1.5.0/bin/java /usr/bin/java
do
[ -x "$JAVA_CMD" ] && break
JAVA_CMD="$candidate"
done
fi
[ -x "$JAVA_CMD" ] || { printf "[ $FUNCNAME ] no java found, exiting $0 \n"; exit 2; } && printf "[ $FUNCNAME ] Using java executable Found in: $JAVA_CMD \n"
}
execJenkinsCli(){ # excute jenkins-cli jar
jenkins_clinet_jar=./jenkins-cli.jar
# download only if it's newwer than the local version [ curl -z ], the cli jar should be of the same jenkins version ...
curl -s -z ./jenkins-cli.jar ${JENKINS_URL}/jnlpJars/jenkins-cli.jar -o ${jenkins_clinet_jar} || { echo "Echo cannot obtain jenkins-cli.jar exiting"; exit 2;}
cli_cmd=$1
cmd_params=$2
cmd_prefix="${JAVA_CMD} -jar ${jenkins_clinet_jar} -s ${JENKINS_URL}"
${cmd_prefix} who-am-i | grep 'Authenticated as: anonymous' &>/dev/null && anon=0
#anon=$?
if [ "$anon" != "0" ]; then
#printf "[ $FUNCNAME ] using jenkins-cli with private key auth"
exec ${cmd_prefix} ${cli_cmd} ${cmd_params}
elif [ "x" = "x${JENKINS_USER}" ] || [ "x" = "x${JENKINS_PASS}" ]; then
printf "[ $FUNCNAME ] cannot determin jenkins credentials\n";
exit 3;
else
exec ${cmd_prefix} ${cli_cmd} ${cmd_params} --username ${JENKINS_USER} --password ${JENKINS_PASS}
fi
}
generateJob(){ # generates a jenkins job
if [ $# -lt 2 ] ; then
echo ""
exit 1
fi
new_job_name=${1}
tmpl_job_name=${2}
scm_url=${3}
http_url=${4}
fork_url=${5}
execJenkinsCli get-job ${tmpl_job_name} | ${XML} ed -O -S -P -u '//project/scm/source' -v ${scm_url} | ${XML} ed -O -S -P -u '//project/scm/browser/url' -v ${http_url} | ${XML} ed -O -S -P -u '//project/builders/hudson.tasks.Maven/properties' -v ${fork_url} | execJenkinsCli create-job ${new_job_name}
execJenkinsCli enable-job ${new_job_name}
}
isJavaAvail
generateJob "$@"
@jorgepenacotarelo
Copy link
Author

Create a template job [preferably keep it disabled so if it has SCM triggers it doesn't start on any scm change ...]
Create a job which will generate the jobs for you with parameters see this gist

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment