Tá go leor alt ar Habré faoi Jenkins, ach is beag samplaí a chuireann síos ar conas a oibríonn Jenkins agus gníomhairí duga. Is maith le gach uirlis tógála tionscadail tóir
Inniu tá réiteach ar an bhfadhb: tá Jenkins 2 iontach ag obair leis
Cén fáth ar thosaigh mé ag réiteach na faidhbe seo?
Ós rud é go bhfuil muid i gcuideachta
- cuid mhór ama rite a dhéanann forbróirí dearmad a ghlanadh;
- tá coinbhleachtaí ann idir leaganacha éagsúla de na hamanna rite céanna;
- Tá sraith comhpháirteanna éagsúla ag teastáil ó gach forbróir.
Tá fadhbanna eile ann, ach lig dom an réiteach a insint duit.
Jenkins sa Docker
Ós rud é go bhfuil Docker bunaithe go maith anois sa domhan forbartha, is féidir beagnach rud ar bith a reáchtáil ag baint úsáide as Docker. Is é an réiteach atá agam ná Jenkins in Docker a bheith agam agus a bheith in ann coimeádáin Docker eile a rith. Thosaigh an cheist seo a chur siar in 2013 san alt “
I mbeagán focal, ní mór duit ach Docker féin a shuiteáil i gcoimeádán oibre agus an comhad a shuiteáil /var/run/docker.sock
.
Seo sampla Dockerfile a d'iompaigh amach do Jenkins.
FROM jenkins/jenkins:lts
USER root
RUN apt-get update &&
apt-get -y install apt-transport-https
ca-certificates
curl
gnupg2
git
software-properties-common &&
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey &&
add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")
$(lsb_release -cs)
stable" &&
apt-get update &&
apt-get -y install docker-ce &&
usermod -aG docker jenkins
RUN curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
RUN apt-get clean autoclean && apt-get autoremove —yes && rm -rf /var/lib/{apt,dpkg,cache,log}/
USER jenkins
Mar sin, fuair muid coimeádán Docker ar féidir leis orduithe Docker a fhorghníomhú ar an meaisín óstach.
Socrú a thógáil
Ní fada ó shin fuair Jenkins an deis chun cur síos a rialacha ag baint úsáide as
Mar sin cuirimis Dockerfile speisialta sa stór féin, ina mbeidh na leabharlanna go léir atá riachtanach don tógáil. Ar an mbealach seo, is féidir leis an bhforbróir féin timpeallacht in-athdhéanta a ullmhú agus ní bheidh air iarraidh ar OPS leagan sonrach de Node.JS a shuiteáil ar an óstach.
FROM node:12.10.0-alpine
RUN npm install yarn -g
Tá an íomhá tógála seo oiriúnach don chuid is mó d'fheidhmchláir Node.JS. Cad a tharlóidh más rud é, mar shampla, go dteastaíonn íomhá uait do thionscadal JVM le scanóir Sonar san áireamh taobh istigh? Tá tú saor in aisce na comhpháirteanna a theastaíonn le haghaidh cóimeála a roghnú.
FROM adoptopenjdk/openjdk12:latest
RUN apt update
&& apt install -y
bash unzip wget
RUN mkdir -p /usr/local/sonarscanner
&& cd /usr/local/sonarscanner
&& wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
&& unzip sonar-scanner-cli-3.3.0.1492-linux.zip
&& mv sonar-scanner-3.3.0.1492-linux/* ./
&& rm sonar-scanner-cli-3.3.0.1492-linux.zip
&& rm -rf sonar-scanner-3.3.0.1492-linux
&& ln -s /usr/local/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
ENV PATH $PATH:/usr/local/sonarscanner/bin/
ENV SONAR_RUNNER_HOME /usr/local/sonarscanner/bin/
Rinneamar cur síos ar thimpeallacht an tionóil, ach cad atá le déanamh ag Jenkins leis? Agus is féidir le gníomhairí Jenkins oibriú le híomhánna Docker den sórt sin agus iad a thógáil go hinmheánach.
stage("Build project") {
agent {
docker {
image "project-build:${DOCKER_IMAGE_BRANCH}"
args "-v ${PWD}:/usr/src/app -w /usr/src/app"
reuseNode true
label "build-image"
}
}
steps {
sh "yarn"
sh "yarn build"
}
}
Treoir agent
úsáideann maoin docker
áit ar féidir leat a shonrú:
- ainm an choimeádáin tionóil de réir do bheartais ainmniúcháin;
- argóintí a theastaíonn chun an coimeádán tógála a rith, áit inár gcás féin a chuirfimid an t-eolaire reatha suas mar eolaire laistigh den choimeádán.
Agus cheana féin sna céimeanna tógála léirímid na horduithe atá le forghníomhú taobh istigh den ghníomhaire tógála Docker. Is féidir leis seo a bheith rud ar bith, mar sin cuirim imscaradh feidhmchlár ag baint úsáide as ansible freisin.
Thíos ba mhaith liom a thaispeáint Jenkinsfile cineálach gur féidir le feidhmchlár Node.JS simplí a thógáil.
def DOCKER_IMAGE_BRANCH = ""
def GIT_COMMIT_HASH = ""
pipeline {
options {
buildDiscarder(
logRotator(
artifactDaysToKeepStr: "",
artifactNumToKeepStr: "",
daysToKeepStr: "",
numToKeepStr: "10"
)
)
disableConcurrentBuilds()
}
agent any
stages {
stage("Prepare build image") {
steps {
sh "docker build -f Dockerfile.build . -t project-build:${DOCKER_IMAGE_BRANCH}"
}
}
stage("Build project") {
agent {
docker {
image "project-build:${DOCKER_IMAGE_BRANCH}"
args "-v ${PWD}:/usr/src/app -w /usr/src/app"
reuseNode true
label "build-image"
}
}
steps {
sh "yarn"
sh "yarn build"
}
}
post {
always {
step([$class: "WsCleanup"])
cleanWs()
}
}
}
Cad a tharla?
A bhuíochas leis an modh seo, réitigh muid na fadhbanna seo a leanas:
- laghdaítear am cumraíochta cóimeála timpeallachta go 10 - 15 nóiméad in aghaidh an tionscadail;
- timpeallacht tógála feidhmchláir atá go hiomlán athdhéanta, toisc gur féidir leat é a thógáil ar an mbealach seo ar do ríomhaire áitiúil;
- níl aon fhadhbanna ann maidir le coinbhleachtaí idir leaganacha éagsúla d'uirlisí tionóil;
- i gcónaí spás oibre glan nach bhfaigheann clogged.
Tá an réiteach féin simplí agus soiléir agus ligeann duit roinnt buntáistí a fháil. Sea, tá an tairseach iontrála ardaithe beagán i gcomparáid le horduithe simplí le haghaidh tionóil, ach anois tá ráthaíocht ann go dtógfar i gcónaí é agus is féidir leis an bhforbróir féin gach rud atá riachtanach dá phróiseas tógála a roghnú.
Is féidir leat an íomhá a bhailigh mé a úsáid freisin
Agus an t-alt seo á scríobh, tháinig plé ar ghníomhairí a úsáid ar fhreastalaithe cianda ionas nach ndéanfaí an máistir nód a luchtú le breiseán
Foinse: will.com