aboutsummaryrefslogtreecommitdiff
path: root/Jenkinsfile
blob: 265e6c6ab2ebc41bba6c5d62ca41899491ff86f2 (plain)
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
/*  This is intended to test the dev & master branches of the gr-api project,
    where the tests are entirely self contained
*/

pipeline {
    agent any

    triggers {
        cron('H */6 * * *')
        pollSCM('H */3 * * *')
    }

    environment {
        DATA_SRC = "${env.WORKSPACE}/mnt/"

        AMT_JB_CARER_VENV = "${env.WORKSPACE}/amt-jb-carer-venv"
        AMT_JB_VENV = "${env.WORKSPACE}/amt-jb-venv"
    }

    stages {
        stage('Setup DB'){
            steps {
                script {
                    env.DB_NAME = "unittest-amt-jb-" + UUID.randomUUID().toString().replace("-", "").take(12)
                    env.AMT_JB_DB = "postgres://jenkins:123456789@unittest-postgresql.fmt2.grl.internal/${env.DB_NAME}"
                    echo "Using database: ${env.DB_NAME}"
                }

                sh """
                PGPASSWORD=123456789 psql -h unittest-postgresql.fmt2.grl.internal -U jenkins -d postgres <<EOF
                CREATE DATABASE "${env.DB_NAME}" WITH TEMPLATE = template0 ENCODING = 'UTF8';
                EOF
                """
            }
        }

        stage('setup:amt-jb-carer') {
            steps {
                checkout scmGit(
                    branches: [[name: 'master']],
                    extensions: [ cloneOption(shallow: true) ],
                    userRemoteConfigs: [
                        [credentialsId:  'abdeb570-b708-44f3-b857-8a6b06ed9822',
                         url: 'ssh://code.g-r-l.com:6611/panels/amt-jb']
                    ],
                )

                dir("carer/") {
                    sh 'python3.13 -m venv $AMT_JB_CARER_VENV'
                    sh '$AMT_JB_CARER_VENV/bin/pip install -U setuptools wheel pip'
                    sh '$AMT_JB_CARER_VENV/bin/pip install -r requirements.txt'
                    sh '$AMT_JB_CARER_VENV/bin/python3.13 manage.py migrate --settings=carer.settings.unittest'
                }
            }
        }

        /*  Okay, finally we can setup the virtual environment for the actual
            project itself. gr-api FastAPI doesn't manage any of it's own
            database so it doesn't need to do any migrations or anything.
        */
        stage('setup:amt-jb') {
            steps {
                sh 'python3.13 -m venv $AMT_JB_VENV'
                sh '$AMT_JB_VENV/bin/pip install -U setuptools wheel pip'
                withCredentials([sshUserPrivateKey(
                    credentialsId: 'abdeb570-b708-44f3-b857-8a6b06ed9822',
                    keyFileVariable: 'SSH_PRIVATE_KEY')]) {

                    sh """
                        eval \$(ssh-agent) && ssh-add ${SSH_PRIVATE_KEY} && \
                        ${AMT_JB_VENV}/bin/pip install -r requirements.txt
                    """
                }
            }
        }

        stage('tests') {
            steps {
                sh '$AMT_JB_VENV/bin/pytest -v tests'
            }
        }
    }
    post {
        always {
            echo 'One way or another, I have finished'
            deleteDir() /* clean up our workspace */

            sh """
            PGPASSWORD=123456789 psql -h unittest-postgresql.fmt2.grl.internal -U jenkins -d postgres <<EOF
            DROP DATABASE "${env.DB_NAME}";
            EOF
            """
        }
    }
}