Jenkins
Sisukord
Sissejuhatus
Jenkins on serveritarkvara, mis aitab automatiseerida erinevate tarkvaraprojektide ehitust ja paigaldust.
Jenkinsi peamine ülesanne on käivitada eeldefineeritud samme - nt tõmmata alla javas kirjutatud rakenduse algkood, ehitada sellest kokku jar fail ning kopeerida see õnnestumise korral rakendusserverisse. Aga sellega saab automatiseerida igasuguseid serverites tehtavaid töid.
Jenkinsi serveri paigaldus
Jenkinsi käivitamiseks tuleb tõmmata kodulehelt jenkins.war ning panna see käima
java -jar jenkins*.war
Misjärel peaks saama selle veebiliidesele üle http://localhost:8080/ aadressi ligi
Paigaldamine centosil võiks välja näha selline
yum -y install java-1.8.0-openjdk-devel curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key yum -y install jenkins git systemctl start jenkins systemctl enable jenkins
Workeri lisamine
Vaikimisi käivitab Jenkins kõiki töid enda sees. Vahel on vaja aga koormust hajutada või käivitada töid eraldi VM-is. Jenkinsi puhul workeri lisamiseks tuleb lisada ssh plugin. Siis genereerida ssh-keygeniga salajane võti. Tekitada jenkinsisse credential ning panna see sinna. Siis lisada workerile sobivale kasuajale avalik võti ning kõige viimasena paigaldada java ning muud vajalikud komponendid. Workeris käivitab siis jenkins omakorda agendi mille läbi ta jälgib seda ning käivitab erinevaid töid.
Esimene projekt
Luues freestyle projekti, saab avanevas veebivormis määrata giti allika kust jenkins koodi tirib, lisada build käsud või skripti, mis koodi peale allatõmbamist valmis ehitab ja paar käsku-skripti mis valmis rakendust peale seda testib ja rakendusserverisse uploadib. Nende sammude juures saab seejuures kasutada ka muutujaid ning luua valikmenüüsid kust võimalik eri parameetreid või prod-test keskkondi vahetada
Näiteprojekt milles esmalt seadistatud muutuja kus versiooninumber
Seejätel giti url
Siis koodi valmis ehitamine. Nagu näha ei pea kõiki ehituseks vajalikke pakke otse jenkinsi serverisse paigaldama vaid on võimalik kasutada ka dockerit, näiteks soovides ehitada maveni abil pakki
docker run --rm -v $PWD:/root -w /root maven mvn package
Või kasutades gradlet tekitada jar fail
docker run --rm \ -v "$PWD":/home/gradle/project \ -u root \ -e HOME=. \ -w /home/gradle/project \ gradle \ gradle bootJar --info
Ehituse tulemusena tekkinud faili arhiveerimine
Keerukamad kasutamisnäited
Valides This project is parameterized saab lisada projektidele ka erinevaid muutujaid
Ssh käsu käivitamist saab lihtsustada läbi muutujate kasutamise
ssh_command="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null test@server.ee" $ssh_command "cd /srv && wget -c https://repo1.maven.org/maven2/org/opentripplanner/otp/1.3.0/otp-1.3.0-shaded.jar"
Failide kopeerimine peale õnnestunud ehitust
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null build/*.jar kasutaja@server:/srv
Et anda mingit muutujat ühelt töölt teistele edasi tuleb paigaldada plugin “Parameterized Trigger Plugin”.
Nüüd saab post-build actioni juures defineerida trigger parameterized build on other projects ning seal defineerida muutujaid stiilis
muutuja=väärtus
või siis eelnevalt sisestatud string parameetreid
git_refspec=${git_refspec}
Jenkins käivitab shelli käske /bin/sh abil mitte bashiga, mistõttu vaja keerukamate käskude algusse panna #!/bin/bash
Üldiselt on hea mõte tekitada tööde juurde $git_refspec nimeline muutuja mis sisaldab endas branchi versiooni numbrit. Seadistad saab selle
*/$git_refspec
Kui tahtmine aga branchi asemel kasutada tagi tuleb kirjutada
refs/tags/$git_refspec
Jenkinsi varundamine
Kuna Jenkinsi tööd ja konfiguratsioon kujutavad endast väikesemahulisi tekstifaile võib varundada neid otse giti nt järgmise tööga
git checkout master && git pull origin master
# Export configs
for file in config.xml; do
cp "$JENKINS_HOME/$file" "$file"
done
ls "$JENKINS_HOME/jobs" | while read dir; do
dir="jobs/$dir"
file="$dir/config.xml"
if [ -f "$JENKINS_HOME/$file" ]; then
[ -d "$dir" ] || mkdir -p "$dir"
cp "$JENKINS_HOME/$file" "$file"
fi
done
# Save changes
git status --short
git status --short | egrep "(??| M) " && git add .
git status --short | egrep "^(A|D|M|R) " && git commit --all --message="Automatic config backup ($BUILD_TAG)"
git log -1
git push -u origin master