Config Jenkins's service to use mvn command manually

Posted on
development

ติดตั้ง Jenkins อีกตัวเพื่อจัดการ deploy application ตัวใหม่ที่กำลังพัฒนากันอยู่ ทำเป็น OS service เอาไว้ด้วย เวลา server มันถูกรีสตาร์ตมันจะได้กลับทำงานอยู่ตลอด

ตอนแรก project ที่พัฒนาอยู่ใช้ Ant build script ภายหลังเรามาเปลี่ยนเป็น Maven จึงไปปรับ Jenkins configuration จะให้ Jenkins เค้าติดตั้ง Apache Maven ให้ด้วย แต่ว่า check checkbox แล้วก็ยังใช้ไม่ได้ เค้าไม่ติดตั้งให้เลยต้องมาติดตั้ง maven command เองซะเลยดีกว่า

วิธีติดตั้ง maven ก็ไม่ซับซ้อน ไปโหลด binary distribution ที่เป็นไฟล์แบบ .tar.gz มา

wget http://www-eu.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
...
tar zxvf wget apache-maven-3.5.0-bin.tar.gz
mkdir /opt
sudo mv apache-maven-3.5.0 /opt/

ไฟล์ที่ใช้ทำเป็น service สร้างไว้ที่ /etc/init.d/jenkins-init

เนื้อหาในไฟล์เป็นแบบนี้

#!/bin/sh

[ -f /etc/default/jenkins-init ] && . /etc/default/jenkins-init

DESC="Jenkins CI Server"
NAME=jenkins
PIDFILE=/var/run/$NAME.pid
RUN_AS=vagrant
COMMAND="/usr/bin/java -- -jar /home/ubuntu/apps/jenkins.war"

d_start() {
	start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}

d_stop() {
	start-stop-daemon --stop --quiet --pidfile $PIDFILE
	if [ -e $PIDFILE ]
		then rm $PIDFILE
	fi
}

case $1 in
	start)
	echo -n "Starting $DESC: $NAME"
	d_start
	echo "."
	;;
	stop)
	echo -n "Stopping $DESC: $NAME"
	d_stop
	echo "."
	;;
	restart)
	echo -n "Restarting $DESC: $NAME"
	d_stop
	sleep 1
	d_start
	echo "."
	;;
	*)
	echo "usage: $NAME {start|stop|restart}"
	exit 1
	;;
esac

exit 0

ตรง /home/ubuntu/apps/ นี่ก็แล้วแต่ว่าจะเอาไว้ที่ไหนนะ อาจจะไม่เอาไว้ใน folder apps ก็ได้ แต่เราต้องเปลี่ยนใน script ให้ตรงกับที่มีไฟล์ jenkins.war อยู่จริงๆ

จะต้องเปลี่ยน mode ให้ execute ได้ด้วย

sudo chmod +x /etc/init.d/jenkins-init

ต่อไปสร้าง environment variable สำหรับการรันคำสั่ง mvn ด้วย (เป็นไฟล์ที่มีการอ้างถึงใน script ด้านบนแล้ว)

sudo vi /etc/default/jenkins-init

เนื้อหาไฟล์ (JAVA_HOME แต่ละคนอาจจะแตกต่างจากนี้ ถ้าใน ubuntu ส่วนใหญ่แล้วจะอยู่ใต้ /usr/lib/jvm)

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export M2_HOME=/opt/apache-maven
export MAVEN_HOME=/opt/apache-maven
export PATH=$M2_HOME/bin:$PATH

เป็นอันเสร็จเวลาเรา start,stop service จะใช้คำสั่งแบบนี้

sudo service jenkins-init start และ sudo service jenkins-init stop ตามลำดับ

ถ้าจะตรวจสอบว่า jenkins เห็น environment variable อะไรบ้างหรือเห็น M2_HOME หรือยังให้ไปที่ {jenkins's URL}/systemInfo

Jenkins systemInfo