1+ pipeline {
2+ agent { label 'master' }
3+ environment {
4+ ML_IMAGE_FOLDER = 'imagefiles'
5+ IMAGE_NAME = 'mlmodelimage'
6+ MODEL_NAME = "${MODEL_NAME}"
7+ SCORE_SCRIPT = 'scoring/score.py'
8+ RESOURCE_GROUP = "${RESOURCE_GROUP}"
9+ WORKSPACE_NAME = "${WORKSPACE_NAME}"
10+ ML_CONTAINER_REGISTRY = "${ML_CONTAINER_REGISTRY}"
11+ }
12+ stages {
13+ stage('initialize') {
14+ steps {
15+ echo 'Remove the previous one!'
16+ }
17+ post {
18+ always {
19+ deleteDir() /* clean up our workspace */
20+ }
21+ }
22+ }
23+ stage ('Download build artifacts (get model name)') {
24+ environment {
25+ BUILD_ARTIFACT_FOLDER = "download"
26+ }
27+ steps {
28+ script {
29+ copyArtifacts(projectName: "${env.build_job_name}", selector: buildParameter("ml_model_selector"), target: "${env.BUILD_ARTIFACT_FOLDER}");
30+ def FILES_LIST = sh (script: "ls '${env.BUILD_ARTIFACT_FOLDER}'", returnStdout: true).trim()
31+ //DEBUG
32+ echo "FILES_LIST : ${FILES_LIST}"
33+ MODEL_NAME = sh (script: "cat ${env.BUILD_ARTIFACT_FOLDER}/model_name.txt",
34+ returnStdout: true).trim()
35+ sh "echo ${MODEL_NAME}"
36+ }
37+ }
38+ }
39+ stage('generate_dockerfile') {
40+ steps {
41+ echo "Hello docker image build ${env.BUILD_ID}"
42+ checkout scm
43+ //checkout([$class: 'GitSCM', branches: [[name: '*/ml_model_uc81']],
44+ // userRemoteConfigs: [[url: 'https://github.com/Merlion-Crew/MLOpsPython.git/']]])
45+
46+ sh '''
47+ conda env create --file ./diabetes_regression/ci_dependencies.yml --force
48+ '''
49+
50+ withCredentials([azureServicePrincipal("${AZURE_SP}")]) {
51+ sh '''#!/bin/bash -ex
52+ az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
53+ az account set -s $AZURE_SUBSCRIPTION_ID
54+ export SUBSCRIPTION_ID=$AZURE_SUBSCRIPTION_ID
55+ source /home/azureuser/anaconda3/bin/activate mlopspython_ci
56+ python3 -m ml_service.util.create_scoring_image
57+ '''
58+ }
59+ }
60+ }
61+ stage('build_and_push') {
62+ steps {
63+ echo "Build docker images"
64+
65+ sh '''#!/bin/bash -ex
66+ az acr login --name $ML_CONTAINER_REGISTRY
67+ docker build -t $NEXUS_DOCKER_REGISTRY_URL/$IMAGE_NAME:$BUILD_ID ./diabetes_regression/scoring/$ML_IMAGE_FOLDER/
68+ '''
69+
70+ withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'nexus-docker-repo',
71+ usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
72+
73+ sh '''#!/bin/bash -ex
74+ docker login -u $USERNAME --password $PASSWORD https://$NEXUS_DOCKER_REGISTRY_URL
75+ docker push $NEXUS_DOCKER_REGISTRY_URL/$IMAGE_NAME:$BUILD_ID
76+ '''
77+ }
78+ }
79+ }
80+ stage('deploy') {
81+ steps {
82+ echo "Deploy to Azure App Service"
83+
84+ withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'nexus-docker-repo',
85+ usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
86+
87+ sh '''#!/bin/bash -ex
88+ az webapp config container set --name $AZURE_APPSERVICE_NAME --resource-group $APPSERVICE_RESOURCE_GROUP --docker-custom-image-name $NEXUS_DOCKER_REGISTRY_URL/$IMAGE_NAME:$BUILD_ID --docker-registry-server-url https://$NEXUS_DOCKER_REGISTRY_URL --docker-registry-server-user $USERNAME --docker-registry-server-password $PASSWORD
89+ az webapp restart --name $AZURE_APPSERVICE_NAME --resource-group $APPSERVICE_RESOURCE_GROUP
90+ '''
91+ }
92+ }
93+ }
94+ }
95+ }
0 commit comments