Note_Tech

All technological notes.


Project maintained by simonangel-fong Hosted on GitHub Pages — Theme by mattgraham

Jenkins - Job

Back


Job

When creating a job in Jenkins, it creates a new directory in the /var/jenkins_home/workspace/

pic


Trigger

Trigger Method Description
Manual trigger clicks Build Now in Jenkins. Common for test, staging, or production deployment approval.
SCM polling Jenkins checks Git regularly for changes, such as every 5 minutes.
Webhook trigger Repo sends a request to Jenkins when code is pushed or a PR is created.
Scheduled trigger Runs by cron schedule, such as nightly builds or weekly security scans.
Upstream/downstream trigger One Jenkins job triggers another job after success or failure.
Parameterized trigger User or another system starts a job with parameters, such as env=dev or version=1.2.0.
Remote/API trigger External tools call Jenkins REST API to start a job.
Pull request trigger Jenkins runs checks automatically when a PR is opened or updated. Common for validation before merge.
Minute Hour Date Month weekday

Lab: Execute a bash script


cat > demo-script.sh <<'EOF'
#!/bin/bash

NICKNAME=$1
MSG=$2

echo "Hi, $NICKNAME. This is the message: $MSG"
EOF

chmod +x demo-script.sh

./demo-script.sh Adam "Mission completed."
# Hi, Adam. This is the message: Mission completed.

# copy to docker container
docker ps
# CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                                                                          NAMES
# c818c31087ad   jenkins/jenkins:lts-jdk21   "/usr/bin/tini -- /u…"   32 minutes ago   Up 32 minutes   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 0.0.0.0:50000->50000/tcp, [::]:50000->50000/tcp   jenkins
docker cp demo-script.sh jenkins:/tmp/demo-script.sh
# Successfully copied 2.05kB to jenkins:/tmp/demo-script.sh

# test in container
docker exec -it jenkins /tmp/demo-script.sh Adam "Mission completed."
# Hi, Adam. This is the message: Mission completed.
/tmp/demo-script.sh Adam "Mission completed."

pic


Lab: Parameterized

String Parameters

pic

echo "NICKNAME: $NICKNAME"
echo "MSG: $MSG"
/tmp/demo-script.sh $NICKNAME $MSG

pic


Choose Parameters

pic

/tmp/demo-script.sh $NICKNAME $MSG $SUBFIX

pic


Boolean Parameters

cat > demo-script.sh <<'EOF'
#!/bin/bash

NICKNAME=$1
MSG=$2
FLAG=$3

if [ "$FLAG" = "true" ]; then
  echo "Hi, $NICKNAME. This is the message: $MSG"
else
  echo "Flag is not true."
fi

EOF

# test locally
./demo-script.sh Adam "Mission completed." true
# Hi, Adam. This is the message: Mission completed.
./demo-script.sh Adam "Mission completed."
# Flag is not true.

docker cp demo-script.sh jenkins:/tmp/demo-script.sh
# Successfully copied 2.05kB to jenkins:/tmp/demo-script.sh

pic

echo "NICKNAME: $NICKNAME"
echo "MSG: $MSG"
echo "FLAG: $FLAG"
/tmp/demo-script.sh $NICKNAME $MSG $FLAG

pic


API Call


Lab: triger a job via API

# Step 1: Get crumb
CRUMB=$(curl -u jenkins_trigger:<api_token> \
  http://<jenkins_host>/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb))

# Step 2: Use crumb
curl -u jenkins_trigger:<api_token> \
  -H "$CRUMB" \
  -X POST http://<jenkins_host>/job/<job_name>/build?delay=0sec
curl -u jenkins_trigger:<api_token> \
  -X POST "http://<jenkins_host>/job/<job_name>/buildWithParameters"
  --data param1=value1 --data param2=value2

pic