forked from heavyai/heavyai
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
151 lines (149 loc) · 6.69 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
def precommit_container_image = "sloria/pre-commit"
def precommit_container_name = "heavyai-precommit-$BUILD_NUMBER"
def db_cuda_container_image = "heavyai/core-os-cuda"
def db_cpu_container_image = "heavyai/core-os-cpu"
def stage_succeeded
def git_commit
void setBuildStatus(String message, String state, String context, String commit_sha) {
step([
$class: "GitHubCommitStatusSetter",
reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github.com/heavyai/heavyai"],
contextSource: [$class: "ManuallyEnteredCommitContextSource", context: context],
commitShaSource: [$class: "ManuallyEnteredShaSource", sha: commit_sha],
errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]],
statusResultSource: [ $class: "ConditionalStatusResultSource", results: [[$class: "AnyBuildResult", message: message, state: state]] ]
]);
}
pipeline {
agent none
options { skipDefaultCheckout() }
stages {
stage('Set pending status') {
agent any
steps {
script {
if (env.GITHUB_BRANCH_NAME == 'main') {
script { git_commit = "$GITHUB_BRANCH_HEAD_SHA" }
} else {
script { git_commit = "$GITHUB_PR_HEAD_SHA" }
}
}
// Set pending status manually for all jobs before node is started
setBuildStatus("Build queued", "PENDING", "Pre_commit_hook_check", git_commit);
setBuildStatus("Build queued", "PENDING", "Pytest - [CPU] - Conda", git_commit);
setBuildStatus("Build queued", "PENDING", "Pytest - [GPU] - Conda", git_commit);
}
}
stage("Linter and Tests") {
agent { label 'centos7-p4-x86_64 && tools-docker' }
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Pre_commit_hook_check') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
script { stage_succeeded = false }
setBuildStatus("Running tests", "PENDING", "$STAGE_NAME", git_commit);
sh """
docker pull $precommit_container_image
docker run \
--rm \
--entrypoint= \
--name $precommit_container_name \
-v $WORKSPACE:/apps \
-w /apps \
$precommit_container_image \
pre-commit run --all-files
docker rm -f $precommit_container_name || true
"""
script { stage_succeeded = true }
}
}
post {
always {
script {
if (stage_succeeded == true) {
setBuildStatus("Build succeeded", "SUCCESS", "$STAGE_NAME", git_commit);
} else {
sh """
docker rm -f $precommit_container_name || true
"""
setBuildStatus("Build failed", "FAILURE", "$STAGE_NAME", git_commit);
}
}
}
}
}
stage('Prepare Workspace') {
steps {
sh """
# Pull required test docker container images
docker pull $db_cuda_container_image
docker pull $db_cpu_container_image
"""
}
}
stage('Pytest - [CPU] - Conda') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
script { stage_succeeded = false }
setBuildStatus("Running tests", "PENDING", "$STAGE_NAME", git_commit);
sh """
$WORKSPACE/scripts/run_tests.sh \
--cpu-only
"""
script { stage_succeeded = true }
}
}
post {
always {
script {
if (stage_succeeded == true) {
setBuildStatus("Build succeeded", "SUCCESS", "$STAGE_NAME", git_commit);
} else {
setBuildStatus("Build failed", "FAILURE", "$STAGE_NAME", git_commit);
}
}
}
}
}
stage('Pytest - [GPU] - Conda') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
script { stage_succeeded = false }
setBuildStatus("Running tests", "PENDING", "$STAGE_NAME", git_commit);
sh """
$WORKSPACE/scripts/run_tests.sh \
--gpu-only
"""
script { stage_succeeded = true }
}
}
post {
always {
script {
if (stage_succeeded == true) {
setBuildStatus("Build succeeded", "SUCCESS", "$STAGE_NAME", git_commit);
} else {
setBuildStatus("Build failed", "FAILURE", "$STAGE_NAME", git_commit);
}
}
}
}
}
}
post {
always {
sh """
docker rm -f $precommit_container_name || true
sudo chown -R jenkins-slave:jenkins-slave $WORKSPACE
"""
cleanWs()
}
}
}
}
}