168 lines
5.6 KiB
Groovy
168 lines
5.6 KiB
Groovy
#!/usr/bin/env groovy
|
|
|
|
docker_registry_server = targetImageTag.split(':')[0..1].join(':')
|
|
// This will be the "RUN" displayed on Blue Ocean
|
|
currentBuild.displayName = targetImageTag.split(':')[2]
|
|
// This will be the "MESSAGE" displayed on Blue Ocean
|
|
currentBuild.description = sourceBranch + ": " + commitHash
|
|
|
|
podTemplate(
|
|
cloud:'sc-ipp-blossom-prod',
|
|
//volumes: [persistentVolumeClaim(mountPath: '/mount_binaries', claimName: 'kaolin-pvc', readOnly: false)],
|
|
yaml:'''
|
|
apiVersion: v1
|
|
kind: Pod
|
|
spec:
|
|
volumes:
|
|
- name: pvc-mount
|
|
persistentVolumeClaim:
|
|
claimName: 'kaolin-pvc'
|
|
containers:
|
|
- name: docker
|
|
image: docker:19.03.1
|
|
command:
|
|
- sleep
|
|
args:
|
|
- 1d
|
|
env:
|
|
- name: DOCKER_HOST
|
|
value: tcp://localhost:2375
|
|
volumeMounts:
|
|
- mountPath: /mount_binaries
|
|
name: pvc-mount
|
|
- name: docker-daemon
|
|
image: docker:19.03.1-dind
|
|
securityContext:
|
|
privileged: true
|
|
env:
|
|
- name: DOCKER_TLS_CERTDIR
|
|
value: ""
|
|
resources:
|
|
requests:
|
|
memory: 32Gi
|
|
cpu: 12
|
|
limits:
|
|
memory: 32Gi
|
|
cpu: 12
|
|
volumeMounts:
|
|
- mountPath: /mount_binaries
|
|
name: pvc-mount
|
|
''') {
|
|
node(POD_LABEL) {
|
|
container("docker") {
|
|
try {
|
|
gitlabCommitStatus("build-${configName}") {
|
|
stage("Checkout") {
|
|
checkout([
|
|
$class: 'GitSCM',
|
|
branches: [[name: "${commitHash}"]],
|
|
extensions: [[
|
|
$class: 'SubmoduleOption',
|
|
disableSubmodules: false,
|
|
parentCredentials: false,
|
|
recursiveSubmodules: true,
|
|
reference: '',
|
|
trackingSubmodules: false
|
|
]],
|
|
userRemoteConfigs: [[
|
|
credentialsId: 'kaolin-gitlab-access-token-as-password',
|
|
url: "${repoUrl}"
|
|
]]
|
|
])
|
|
}
|
|
docker.withRegistry("https://${docker_registry_server}", 'kaolin-gitlab-access-token-as-password') {
|
|
stage("Build") {
|
|
baseImage = docker.build(
|
|
"${targetImageTag}-base",
|
|
"""--no-cache --network host -f ./tools/linux/Dockerfile.base \
|
|
--build-arg CUDA_VERSION=${cudaVer} \
|
|
--build-arg CUDNN_VERSION=${cudnnVer} \
|
|
--build-arg PYTHON_VERSION=${pythonVer} \
|
|
--build-arg PYTORCH_VERSION=${torchVer} \
|
|
.
|
|
""")
|
|
targetImage = docker.build(
|
|
"${targetImageTag}",
|
|
"""--no-cache --network host -f ./tools/linux/Dockerfile.install \
|
|
--build-arg BASE_IMAGE=${targetImageTag}-base \
|
|
.
|
|
""")
|
|
}
|
|
if (buildWheel.toBoolean()) {
|
|
stage("Build wheel") {
|
|
cudaTag = cudaVer.split('\\.')[0..<2].join('')
|
|
targetImage.inside() {
|
|
sh """
|
|
ls .
|
|
python setup.py bdist_wheel --dist-dir .
|
|
"""
|
|
}
|
|
pythonVerTag = pythonVer.split('\\.').join('')
|
|
Integer MinorVal = pythonVer.split('\\.')[1].toInteger()
|
|
pythonVerAbiTag = (MinorVal < 8) ? pythonVerTag + 'm' : pythonVerTag
|
|
kaolinVer = sh(script: "cat ./version.txt", returnStdout: true).trim()
|
|
baseWheelName = "kaolin-${kaolinVer}-cp${pythonVerTag}-cp${pythonVerAbiTag}"
|
|
wheelName = "${baseWheelName}-linux_x86_64.whl"
|
|
}
|
|
stage("Reinstall from wheel") {
|
|
targetImage = docker.build(
|
|
"${targetImageTag}",
|
|
"""--no-cache --network host -f ./tools/linux/Dockerfile.install_wheel \
|
|
--build-arg BASE_IMAGE=${targetImageTag}-base \
|
|
--build-arg WHEEL_NAME=${wheelName} \
|
|
.
|
|
""")
|
|
}
|
|
stage("Push wheel to volume") {
|
|
sh """
|
|
mkdir -p /mount_binaries/whl/torch-${torchVer}_cu${cudaTag}
|
|
cp ./${wheelName} /mount_binaries/whl/torch-${torchVer}_cu${cudaTag}/${wheelName}
|
|
"""
|
|
}
|
|
stage("Push wheel to artifact") {
|
|
archiveArtifacts artifacts: "${wheelName}"
|
|
}
|
|
}
|
|
stage("Push") {
|
|
targetImage.push()
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
// In case of build failure, we need to update the following tests as we won't run them.
|
|
for (arch in archsToTest.split(';')) {
|
|
updateGitlabCommitStatus(name: "test-${configName}-${arch}", state: 'canceled')
|
|
}
|
|
throw e
|
|
}
|
|
stage("Launch tests") {
|
|
jobMap = [:]
|
|
for (arch in archsToTest.split(';')) {
|
|
jobMap["${arch}"] = prepareUbuntuTestJob(arch)
|
|
}
|
|
parallel jobMap
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
def prepareUbuntuTestJob(arch) {
|
|
return {
|
|
stage("Test ${arch}") {
|
|
build job: "ubuntu_test_template_CI",
|
|
parameters: [
|
|
string(name: 'sourceBranch', value: "${sourceBranch}"),
|
|
string(name: 'configName', value: "${configName}"),
|
|
string(name: 'imageTag', value: "${targetImageTag}"),
|
|
string(name: 'arch', value: "${arch}"),
|
|
string(name: 'commitHash', value: "${commitHash}")
|
|
],
|
|
// This node doesn't need to be held while tests run.
|
|
wait: false,
|
|
// Success of this script depend only on successful build
|
|
// and launch of tests, not successful tests.
|
|
propagate: false
|
|
}
|
|
}
|
|
}
|