Jenkins

Allikas: Kuutõrvaja

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

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

Jenkis job esimene.jpg

Seejätel giti url

Jenkis job teine.jpg

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

Jenkis job kolmas.jpg

Ehituse tulemusena tekkinud faili arhiveerimine

Jenkis job neljas.jpg

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