Jul 24, 2013

Continuous Delivery Using Jenkins

Let me introduce our Jenkins jobs. If Jenkins was not exist, we would suffer from HARD HARD build and deploy jobs.

First of all, we made our server list file. Because this is very often used by Jenkins deploy and restart jobs.
Add your Jenkins user key to my_name/.ssh/authorized_key on each server.
-Jenkins Server List Configure Job-
CONFIG(){
test -e $1 && cp $1 $1.old
cat > $1 <<EOF
192.28.255.111
192.28.255.112
EOF
test -e $1.old && diff $1 $1.old|cat
}
CONFIG /usr/local/repository/prd/my_product.list


Next step, we build our project and make backup too.
-Jenkins Build Job-
Build our project by running maven.
  clean release:clean release:prepare package -P prd

And make backup directory.
#This script is for jenkins build job
OLD_DIR=$(date +"%Y_%m_%d_%H_%M_%S")
REPO=/usr/local/repository/prd/my_product/
BACKUP_DIR="/usr/local/repository/prd/my_product_backup"
if [ -d "$BACKUP_DIR" ]; then
mv $BACKUP_DIR/my_product $BACKUP_DIR/$OLD_DIR/
fi
mv $REPO $BACKUP_DIR/my_product/
/usr/bin/rsync -acvz ${WORKSPACE}/target/deploy/ $REPO --delete


And run deploy job. Don't forget set post-build Actions. We set Build other projects(Jenkins Restart Job)
-Jenkins Deploy Job-
LIST=/usr/local/repository/prd/my_product.list
REPO=/usr/local/repository/prd/my_product
DEST=/usr/local/app/
sed -e "s/#.*//" -e "s/^\s*$//" $LIST | while read i; do
echo "#### deploy -> $i ####"
rsync -e 'ssh -o StrictHostKeyChecking=no' -acvz --delete --exclude="logs" $REPO my_name@$i:$DEST
done
sed -e "s/#.*//" -e "s/^\s*$//" $LIST


-Jenkins Restart Job-
LIST=/usr/local/repository/prd/my_product.list
COMMAND="sh /usr/local/app/my_product/bin/my_product_control.sh restart"
sed -e "s/#.*//" -e "s/^\s*$//" $LIST | while read i; do
echo "#### restart -> $i ####"
ssh -o 'StrictHostKeyChecking=no' -2 -n my_name@$i $COMMAND
done


Sometimes we need to revert our service. We use this job. Don't forget to set Build other projects(Jenkins Deploy Job) that it will execute Jenkins Restart Job.
-Jenkins Roll Back Job-
/usr/bin/rsync -acvz /usr/local/repository/prd/my_product_backup/my_product/ /usr/local/repository/prd/my_product/ --delete

Jul 22, 2013

[memo] jmagick 6.4.0 configure problem

I had to install jmagick 6.4.0. And I tried to install as the following.

tar xvzf /opt/jmagick-6.4.0-src.tar.gz -C /opt
chown -R root.root /opt/6.4.0
cd /opt/6.4.0
./configure --prefix=/opt/jmagick-6.4.0 --with-java-home=/opt/java/ --with-magick-home=/opt/imagemagick
make all
make install
rm /opt/jmagick
ln -s /opt/jmagick-6.4.0 /opt/jmagick
view raw jmagick.sh hosted with ❤ by GitHub


Jmagick dose not care "--with-java-home=/opt/java/". It just uses "/usr/bin/java javac javah jar".
So you need to link them to /usr/bin

#ln -s /opt/java/bin/java /usr/bin/java


[memo] svc: warning: unable to control file does not exist.

I solved this problem here.

The key is the following command.
# svscanboot &

Jul 9, 2013

[memo] How to add many nodes to Chef Server

I created my node.json file with jackson. And I need to add 100 over nodes to Chef server.
I uploaded to Chef server's tmp directory my nodes files and ran the following script.
#!/bin/bash
for i in /tmp/*
do
knife node from file $i
done
view raw noderegister.sh hosted with ❤ by GitHub


It is simple!