Skip to content

Instantly share code, notes, and snippets.

@iocanel
Created August 25, 2017 12:26
Show Gist options
  • Save iocanel/df52d79da8789791b92574c40c315093 to your computer and use it in GitHub Desktop.
Save iocanel/df52d79da8789791b92574c40c315093 to your computer and use it in GitHub Desktop.
Run Jenkins pipeline from shell
#!/bin/bash
JOB="dev"
CONFIG_XML="/tmp/jenkins-job.xml"
PIPELINE=`cat $1`
read -r -d '' HEADER << __HEADER__
<?xml version="1.0" encoding="UTF-8"?><flow-definition plugin="[email protected]">
<actions/>
<description/>
<keepDependencies>false</keepDependencies>
<properties/>
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="[email protected]">
<script>
__HEADER__
read -r -d '' FOOTER << __FOOTER__
</script>
<sandbox>true</sandbox>
</definition>
<triggers/>
</flow-definition>
__FOOTER__
echo "$HEADER" > /tmp/jenkins-job.xml
echo "$PIPELINE" >> /tmp/jenkins-job.xml
echo "$FOOTER" >> /tmp/jenkins-job.xml
curl -X POST http://jenkins.minikube.io/job/$JOB/config.xml --data-binary "@$CONFIG_XML" 2> /dev/null
BUILD_ID=`curl -X GET http://jenkins.minikube.io/job/$JOB/api/json 2> /dev/null | jq '.nextBuildNumber'`
QUEUE_ITEM_URL=`curl -i http://jenkins.minikube.io/job/dev/build 2> /dev/null | grep Location | cut -d " " -f2`
echo "Starting Job:$JOB with Build number: $BUILD_ID"
#Wait until the build is up and running
echo -n "Waiting"
while true; do
STATUS_CODE=`curl --write-out %{http_code} --silent --output /dev/null http://jenkins.minikube.io/job/$JOB/$BUILD_ID/api/json`
if [[ $STATUS_CODE -eq 404 ]]; then
echo -n "."
sleep 2
else
break
fi
done
echo ""
TOTAL_LINES=0
# Loop forever (or at least until the build is over) and get the logs
while true; do
RUNNING=`curl -X GET http://jenkins.minikube.io/job/$JOB/$BUILD_ID/api/json 2> /dev/null | jq '.building'`
TEXT=`curl -s http://jenkins.minikube.io/job/$JOB/$BUILD_ID/consoleText 2> /dev/null`
TO_DISPLAY=`echo "$TEXT" | tail -n +$(($TOTAL_LINES+1))`
if [ "$TO_DISPLAY" == "" ];then
continue;
fi
echo "$TO_DISPLAY"
PRINTED_LINES=`echo "$TO_DISPLAY" | wc -l`
TOTAL_LINES=$(($TOTAL_LINES + $PRINTED_LINES))
if [ "$RUNNING" == "true" ]; then
sleep 2
else
break
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment