Jenkinsfile 3.5 KB
Newer Older
Chris Austen's avatar
Chris Austen committed
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
// RULES:
// 1) Build and cache the docker 
// 2) Be able to restart parts of the pipeline
// 3) Check your targets 
//
// Build Process
//
// HIP Clang Docker --> "all targets", "clang asan", etc 
// ORT Docker       --> "ORT benchmark"
//
// Each docker can be used on any system

def rocmnode(name) {
    return 'rocmtest && (' + name + ')'
}

def getDockerImageName(dockerArgs)
{
    sh "echo ${dockerArgs} > factors.txt"
    def image = "rocm/migraphx-ci-ubuntu"
    sh "md5sum Dockerfile requirements.txt dev-requirements.txt >> factors.txt"
    def docker_hash = sh(script: "md5sum factors.txt | awk '{print \$1}' | head -c 6", returnStdout: true)
    sh "rm factors.txt"
    echo "Docker tag hash: ${docker_hash}"
    image = "${image}:ci_${docker_hash}"
    if(params.DOCKER_IMAGE_OVERRIDE != '')
    {
        echo "Overriding the base docker image with ${params.DOCKER_IMAGE_OVERRIDE}"
        image = "${params.DOCKER_IMAGE_OVERRIDE}"
    }
    return image

}

def getDockerImage(Map conf=[:])
{
    env.DOCKER_BUILDKIT=1
    def gpu_arch = "gfx1030;gfx1100;gfx1101;gfx1102" // prebuilt dockers should have all the architectures enabled so one image can be used for all stages
    def dockerArgs = "--build-arg GPU_TARGETS='${gpu_arch}'"
    echo "Docker Args: ${dockerArgs}"

    def image = getDockerImageName(dockerArgs)

    def dockerImage
    try{
        echo "Pulling down image: ${image}"
        dockerImage = docker.image("${image}")
        dockerImage.pull()
    }
    catch(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){
        echo "The job was cancelled or aborted"
        throw e
    }
    catch(Exception ex)
    {
        dockerImage = docker.build("${image}", "${dockerArgs} .")
        withDockerRegistry([ credentialsId: "docker_test_cred", url: "" ]) {
            dockerImage.push()
        }
    }
    return [dockerImage, image]
}


pipeline {
    agent none
    options {
        parallelsAlwaysFailFast()
    }
    parameters {
        booleanParam(
            name: "BUILD_DOCKER",
            defaultValue: true,
            description: "")
        booleanParam(
            name: "BUILD_STATIC_CHECKS",
            defaultValue: true,
            description: "")
        string(name: "DOCKER_IMAGE_OVERRIDE",
            defaultValue: '',
            description: "")            
    }

    stages{
        stage('Build Docker'){
            when {
                expression { params.BUILD_DOCKER }
            }
            agent{ label rocmnode("nogpu") }
            steps{
                getDockerImage()
            }
        }
        stage("Static checks") {
            parallel{
                stage('Hip Tidy') {
                    agent{ label rocmnode("nogpu") }
                    environment{
Chris Austen's avatar
Chris Austen committed
99
                        build_cmd = "Chris"
Chris Austen's avatar
Chris Austen committed
100
101
                    }
                    steps{
Chris Austen's avatar
Chris Austen committed
102
103
104
105
106
107
108
109
                        cmd = """ 
                            pwd
                            ls -l /
                            /opt/rocm/bin/rocm-smi
                        """

                        sh cmd, label: " from Hip Tidy"
                        sh script: "echo hi mom", label: "my step"
Chris Austen's avatar
Chris Austen committed
110
111
112
113
114
115
116
117
118
119
120
121
                    }
                }
                stage('Clang Format') {
                    agent{ label rocmnode("nogpu") }
                    steps{
                        sh "echo Hi from Clang Format"
                    }
                }
            }
        }
    }
}