Skip to content

Commit a9d1590

Browse files
vitodbmambelli
authored andcommitted
Adding Jenkinsfile for EL9
1 parent 018c8ab commit a9d1590

1 file changed

Lines changed: 242 additions & 0 deletions

File tree

.Jenkins/workflows/Jenkinsfile_EL9

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
// SPDX-FileCopyrightText: 2017 Fermi Research Alliance, LLC
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
pipeline {
5+
agent { label 'docker' }
6+
stages{
7+
stage('DE tests') {
8+
parallel {
9+
stage('flake8') {
10+
agent {
11+
node {
12+
label 'docker'
13+
customWorkspace "${WORKSPACE}/${STAGE_NAME}"
14+
}
15+
}
16+
options {
17+
timeout(time: "${STAGE_TIMEOUT}", activity: false, unit: 'MINUTES')
18+
}
19+
steps {
20+
script {
21+
// DOCKER_IMAGE is defined through Jenkins project
22+
flake8StageDockerImage="${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME}"
23+
// Set custom Build Name
24+
if (params.GITHUB_PR_NUMBER) {
25+
if (params.GITHUB_PR_STATE == 'CLOSED') {
26+
currentBuild.displayName="${BUILD_NUMBER}#${EL_VERSION}#PR#${GITHUB_PR_NUMBER}#CLOSED"
27+
} else {
28+
currentBuild.displayName="${BUILD_NUMBER}#${EL_VERSION}#PR#${GITHUB_PR_NUMBER}"
29+
}
30+
} else {
31+
currentBuild.displayName="${BUILD_NUMBER}#${BRANCH}"
32+
}
33+
}
34+
echo "cleanup workspace"
35+
sh 'for f in $(ls -A); do rm -rf ${f}; done'
36+
// DE_REPO is defined through Jenkins project
37+
echo "clone decisionengine code from ${DE_REPO}"
38+
sh '''
39+
git clone ${DE_REPO}
40+
cd decisionengine
41+
echo "checkout ${BRANCH} branch"
42+
git checkout ${BRANCH}
43+
echo GITHUB_PR_NUMBER: ${GITHUB_PR_NUMBER} - GITHUB_PR_STATE: ${GITHUB_PR_STATE}
44+
if [[ -n ${GITHUB_PR_NUMBER} && ${GITHUB_PR_STATE} == OPEN ]]; then
45+
git fetch origin pull/${GITHUB_PR_NUMBER}/merge:merge${GITHUB_PR_NUMBER}
46+
git checkout merge${GITHUB_PR_NUMBER}
47+
fi
48+
cd ..
49+
'''
50+
echo "prepare docker image ${flake8StageDockerImage}"
51+
sh "docker build --pull --tag ${flake8StageDockerImage} --build-arg BASEIMAGE=hepcloud/decision-engine-ci-el9:${BRANCH} --build-arg UID=\$(id -u) --build-arg GID=\$(id -g) -f decisionengine/package/ci/EL9/Dockerfile decisionengine/package/ci/EL9/"
52+
echo "Run ${STAGE_NAME} tests"
53+
sh "docker run --rm --env PYTEST_TIMEOUT=${PYTEST_TIMEOUT} -v ${WORKSPACE}/decisionengine:${WORKSPACE}/decisionengine -w ${WORKSPACE}/decisionengine ${flake8StageDockerImage} \"-m pytest -m flake8 --flake8\" \"flake8.log\""
54+
}
55+
post {
56+
always {
57+
archiveArtifacts artifacts: "decisionengine/flake8.log"
58+
// check if the docker container used for this test suite is still active, if so this is due to an aborted test suite
59+
// eventually kill the python process that spawn the test to cleanup CI processes left behind
60+
sh '''
61+
DOCKERID=$(docker ps | grep ${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME} | awk '{print $1}')
62+
if [[ -n ${DOCKERID} ]]; then
63+
docker exec ${DOCKERID} ps -xww && \
64+
KPID=$(docker exec ${DOCKERID} ps -xww | grep python3 | head -1 | awk '{print $1}') && \
65+
docker exec ${DOCKERID} kill -9 ${KPID} || true
66+
docker exec ${DOCKERID} ps -xww || true
67+
fi
68+
'''
69+
echo "cleanup docker image ${flake8StageDockerImage}"
70+
sh "docker rmi ${flake8StageDockerImage}"
71+
}
72+
}
73+
}
74+
stage('pylint') {
75+
agent {
76+
node {
77+
label 'docker'
78+
customWorkspace "${WORKSPACE}/${STAGE_NAME}"
79+
}
80+
}
81+
options {
82+
timeout(time: "${STAGE_TIMEOUT}", activity: false, unit: 'MINUTES')
83+
}
84+
steps {
85+
script {
86+
// DOCKER_IMAGE is defined through Jenkins project
87+
pylintStageDockerImage="${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME}"
88+
}
89+
echo "cleanup workspace"
90+
sh 'for f in $(ls -A); do rm -rf ${f}; done'
91+
// DE_REPO is defined through Jenkins project
92+
echo "clone decisionengine code from ${DE_REPO}"
93+
sh '''
94+
git clone ${DE_REPO}
95+
cd decisionengine
96+
echo "checkout ${BRANCH} branch"
97+
git checkout ${BRANCH}
98+
echo GITHUB_PR_NUMBER: ${GITHUB_PR_NUMBER} - GITHUB_PR_STATE: ${GITHUB_PR_STATE}
99+
if [[ -n ${GITHUB_PR_NUMBER} && ${GITHUB_PR_STATE} == OPEN ]]; then
100+
git fetch origin pull/${GITHUB_PR_NUMBER}/merge:merge${GITHUB_PR_NUMBER}
101+
git checkout merge${GITHUB_PR_NUMBER}
102+
fi
103+
cd ..
104+
'''
105+
echo "prepare docker image ${pylintStageDockerImage}"
106+
sh "docker build --pull --tag ${pylintStageDockerImage} --build-arg BASEIMAGE=hepcloud/decision-engine-ci-el9:${BRANCH} --build-arg UID=\$(id -u) --build-arg GID=\$(id -g) -f decisionengine/package/ci/EL9/Dockerfile decisionengine/package/ci/EL9/"
107+
echo "Run ${STAGE_NAME} tests"
108+
sh "docker run --rm --env PYTEST_TIMEOUT=${PYTEST_TIMEOUT} -v ${WORKSPACE}/decisionengine:${WORKSPACE}/decisionengine -w ${WORKSPACE}/decisionengine ${pylintStageDockerImage} \"-m pylint src/decisionengine/ src/tests/\" \"pylint.log\""
109+
}
110+
post {
111+
always {
112+
archiveArtifacts artifacts: "decisionengine/pylint.log"
113+
// check if the docker container used for this test suite is still active, if so this is due to an aborted test suite
114+
// eventually kill the python process that spawn the test to cleanup CI processes left behind
115+
sh '''
116+
DOCKERID=$(docker ps | grep ${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME} | awk '{print $1}')
117+
if [[ -n ${DOCKERID} ]]; then
118+
docker exec ${DOCKERID} ps -xww && \
119+
KPID=$(docker exec ${DOCKERID} ps -xww | grep python3 | head -1 | awk '{print $1}') && \
120+
docker exec ${DOCKERID} kill -9 ${KPID} || true
121+
docker exec ${DOCKERID} ps -xww || true
122+
fi
123+
'''
124+
echo "cleanup docker image ${pylintStageDockerImage}"
125+
sh "docker rmi ${pylintStageDockerImage}"
126+
}
127+
}
128+
}
129+
stage('unit_tests') {
130+
agent {
131+
node {
132+
label 'docker'
133+
customWorkspace "${WORKSPACE}/${STAGE_NAME}"
134+
}
135+
}
136+
options {
137+
timeout(time: "${STAGE_TIMEOUT}", activity: false, unit: 'MINUTES')
138+
}
139+
steps {
140+
script {
141+
// DOCKER_IMAGE is defined through Jenkins project
142+
unit_testsStageDockerImage="${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME}"
143+
}
144+
echo "cleanup workspace"
145+
sh 'for f in $(ls -A); do rm -rf ${f}; done'
146+
// DE_REPO is defined through Jenkins project
147+
echo "clone decisionengine code from ${DE_REPO}"
148+
sh '''
149+
git clone ${DE_REPO}
150+
cd decisionengine
151+
echo "checkout ${BRANCH} branch"
152+
git checkout ${BRANCH}
153+
echo GITHUB_PR_NUMBER: ${GITHUB_PR_NUMBER} - GITHUB_PR_STATE: ${GITHUB_PR_STATE}
154+
if [[ -n ${GITHUB_PR_NUMBER} && ${GITHUB_PR_STATE} == OPEN ]]; then
155+
git fetch origin pull/${GITHUB_PR_NUMBER}/merge:merge${GITHUB_PR_NUMBER}
156+
git checkout merge${GITHUB_PR_NUMBER}
157+
fi
158+
cd ..
159+
'''
160+
echo "prepare docker image ${unit_testsStageDockerImage}"
161+
sh "docker build --pull --tag ${unit_testsStageDockerImage} --build-arg BASEIMAGE=hepcloud/decision-engine-ci-el9:${BRANCH} --build-arg UID=\$(id -u) --build-arg GID=\$(id -g) -f decisionengine/package/ci/EL9/Dockerfile decisionengine/package/ci/EL9/"
162+
echo "Run ${STAGE_NAME} tests"
163+
sh "docker run --rm --env PYTEST_TIMEOUT=${PYTEST_TIMEOUT} -v ${WORKSPACE}/decisionengine:${WORKSPACE}/decisionengine -w ${WORKSPACE}/decisionengine ${unit_testsStageDockerImage} \"-m pytest --cov-report term --cov=decisionengine --no-cov-on-fail\" \"pytest.log\""
164+
}
165+
post {
166+
always {
167+
archiveArtifacts artifacts: "decisionengine/pytest.log"
168+
// check if the docker container used for this test suite is still active, if so this is due to an aborted test suite
169+
// eventually kill the python process that spawn the test to cleanup CI processes left behind
170+
sh '''
171+
DOCKERID=$(docker ps | grep ${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME} | awk '{print $1}')
172+
if [[ -n ${DOCKERID} ]]; then
173+
docker exec ${DOCKERID} ps -xww && \
174+
KPID=$(docker exec ${DOCKERID} ps -xww | grep python3 | head -1 | awk '{print $1}') && \
175+
docker exec ${DOCKERID} kill -9 ${KPID} || true
176+
docker exec ${DOCKERID} ps -xww || true
177+
fi
178+
'''
179+
echo "cleanup docker image ${unit_testsStageDockerImage}"
180+
sh "docker rmi ${unit_testsStageDockerImage}"
181+
}
182+
}
183+
}
184+
stage('rpmbuild') {
185+
agent {
186+
node {
187+
label 'docker'
188+
customWorkspace "${WORKSPACE}/${STAGE_NAME}"
189+
}
190+
}
191+
options {
192+
timeout(time: "${STAGE_TIMEOUT}", activity: false, unit: 'MINUTES')
193+
}
194+
steps {
195+
script {
196+
// DOCKER_IMAGE is defined through Jenkins project
197+
rpmbuildStageDockerImage="${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME}"
198+
}
199+
echo "cleanup workspace"
200+
sh 'for f in $(ls -A); do rm -rf ${f}; done'
201+
// DE_REPO is defined through Jenkins project
202+
echo "clone decisionengine code from ${DE_REPO}"
203+
sh '''
204+
git clone ${DE_REPO}
205+
cd decisionengine
206+
echo "checkout ${BRANCH} branch"
207+
git checkout ${BRANCH}
208+
echo GITHUB_PR_NUMBER: ${GITHUB_PR_NUMBER} - GITHUB_PR_STATE: ${GITHUB_PR_STATE}
209+
if [[ -n ${GITHUB_PR_NUMBER} && ${GITHUB_PR_STATE} == OPEN ]]; then
210+
git fetch origin pull/${GITHUB_PR_NUMBER}/merge:merge${GITHUB_PR_NUMBER}
211+
git checkout merge${GITHUB_PR_NUMBER}
212+
fi
213+
cd ..
214+
'''
215+
echo "prepare docker image ${rpmbuildStageDockerImage}"
216+
sh "docker build --pull --tag ${rpmbuildStageDockerImage} --build-arg BASEIMAGE=hepcloud/decision-engine-ci-el9:${BRANCH} --build-arg UID=\$(id -u) --build-arg GID=\$(id -g) -f decisionengine/package/ci/EL9/Dockerfile decisionengine/package/ci/EL9/"
217+
echo "Run ${STAGE_NAME} tests"
218+
sh "docker run --rm --env PYTEST_TIMEOUT=${PYTEST_TIMEOUT} -v ${WORKSPACE}/decisionengine:${WORKSPACE}/decisionengine -w ${WORKSPACE}/decisionengine ${rpmbuildStageDockerImage} \"setup.py bdist_rpm\" \"rpmbuild.log\""
219+
}
220+
post {
221+
always {
222+
archiveArtifacts artifacts: "decisionengine/rpmbuild.log,decisionengine/dist/*.rpm"
223+
// check if the docker container used for this test suite is still active, if so this is due to an aborted test suite
224+
// eventually kill the python process that spawn the test to cleanup CI processes left behind
225+
sh '''
226+
DOCKERID=$(docker ps | grep ${DOCKER_IMAGE}_${BUILD_NUMBER}_${STAGE_NAME} | awk '{print $1}')
227+
if [[ -n ${DOCKERID} ]]; then
228+
docker exec ${DOCKERID} ps -xww && \
229+
KPID=$(docker exec ${DOCKERID} ps -xww | grep python3 | head -1 | awk '{print $1}') && \
230+
docker exec ${DOCKERID} kill -9 ${KPID} || true
231+
docker exec ${DOCKERID} ps -xww || true
232+
fi
233+
'''
234+
echo "cleanup docker image ${rpmbuildStageDockerImage}"
235+
sh "docker rmi ${rpmbuildStageDockerImage}"
236+
}
237+
}
238+
}
239+
}
240+
}
241+
}
242+
}

0 commit comments

Comments
 (0)