obophenotype / upheno-dev

Framework for the automated construction of uPheno 2.0
MIT License
5 stars 5 forks source link

Old monarch Jenkins pipeline in case needed #32

Open matentzn opened 2 years ago

matentzn commented 2 years ago
pipeline {
    agent any

    // In additional to manual runs, trigger somewhere at midnight to
    // give us the max time in a day to get things right without
    // disrupting people.

    //triggers {
        // Nightly, between 8pm-12:59pm PDT.
    //  cron('H H(20-23) 1-31 * *')
    //}

    environment {

        ///
        /// Automatic run variables.
        // Acquire dates and day to beginning of run.

        START_DATE = sh (
            script: 'date +%Y-%m-%d',
            returnStdout: true
        ).trim()

        START_DAY = sh (
            script: 'date +%A',
            returnStdout: true
        ).trim()

        ///
        /// Internal run variables.
        ///

        // What is the file "namespace" of the ontology--used for
        // finding artifacts.
        ONTOLOGY_FILE_HINT = 'upheno'
        // Ontology repo information.
        TARGET_ONTOLOGY_BRANCH = 'dev-jenkins'
        TARGET_ONTOLOGY_URL = 'https://github.com/obophenotype/upheno-dev.git'
        // The people to call when things go bad or go well. It is a
        // comma-space "separated" string.
        TARGET_ADMIN_EMAILS = 'nicolas.matentzoglu@gmail.com'
        TARGET_SUCCESS_EMAILS = 'nicolas.matentzoglu@gmail.com'
        // This variable should typically be 'TRUE', which will cause
        // some additional basic checks to be made. There are some
        // very exotic cases where these check may need to be skipped
        // for a run, in that case this variable is set to 'FALSE'.
        WE_ARE_BEING_SAFE_P = 'TRUE'
        // Control make to get through our loads faster if
        // possible.
        MAKECMD = 'make'
        // Control the ROBOT environment.
        ROBOT_JAVA_ARGS = '-Xmx140G'
        JAVA_OPTS = '-Xmx140G'
        RELEASEDIR= '/var/lib/jenkins/workspace/upheno2-pipeline@2/src/curation'
        TARGETDIR= '/var/www/data/upheno2'
    }
    options{
        //timestamps()
        buildDiscarder(logRotator(numToKeepStr: '20'))
    }
    stages {
    // Very first: check branch sanity and pause for a minute to
    // give a chance to cancel; clean the workspace before use.

        stage('Ready and clean') {
            steps {
            // Give us a minute to cancel if we want.
            //sleep time: 1, unit: 'MINUTES'
            cleanWs deleteDirs: true, disableDeferredWipeout: true
            }
        }

        stage('Initialize') {
            steps {
                // Upgrading docker image
                sh 'docker pull obolibrary/odkfull:latest'
                // Start preparing environment.
                sh 'env > env.txt'
                sh 'echo $BRANCH_NAME > branch.txt'
                sh 'echo "$BRANCH_NAME"'
                sh 'cat env.txt'
                sh 'cat branch.txt'
                sh 'pwd'
                //sh 'ls -l /var/lib/jenkins/workspace/upheno2-pipeline@2'
                // sh 'chown -R jenkins:jenkins /var/lib/jenkins/workspace/upheno2-pipeline@2/src/curation'
                //sh 'ls -l /var/lib/jenkins/workspace/upheno2-pipeline@2/src/curation'
                sh 'echo $START_DAY > dow.txt'
                sh 'echo "$START_DAY"'
                archiveArtifacts artifacts: "env.txt"
                sh 'cd /var/lib/jenkins/workspace/upheno2-pipeline@2 && git checkout -- . && git clean -fd && git status'
                // ssh monarch@monarch-ttl-prod << EOF
                // ls -l $TARGETDIR/
                // cd $TARGETDIR && rm -rf upheno-release/ 
                // mkdir -p $TARGETDIR/$START_DATE $TARGETDIR/current
                // ls -l $TARGETDIR/
//EOF

            }
        }

        stage('Produce ontology') {
            agent {
                docker {
                    image 'obolibrary/odkfull:latest'
                    // Reset Jenkins Docker agent default to original
                    // root.
                    //args '-u root:root -v /foo:/work -e ROBOT_JAVA_ARGS=-Xmx120G'
                    args '-u root:root'
                    alwaysPull true
                }
            }
            steps {
                // Create a relative working directory and setup our
                // data environment.
                sh 'env > env.txt'
                sh 'cat env.txt'
                sh 'pwd'
                sh 'ls -AlF'
                sh 'ls -AlF /'
                dir('.') {
                    git branch: TARGET_ONTOLOGY_BRANCH,
                        url: TARGET_ONTOLOGY_URL

                    // Default namespace.
                    // sh 'OBO=http://purl.obolibrary.org/obo'

                    dir('./src/scripts') {
                        retry(1){
                            sh 'pwd'
                            sh 'ls'
                            sh 'ls ../curation'
                    //  //sh 'ls ../curation/tmp'
                    //  //sh 'ls /work'
                            sh 'env > env.txt'
                            sh 'cat env.txt'
                            sh 'sh upheno_pipeline_jenkins.sh'
                        }
                    }
                    dir('./src/ontology') {
                        retry(1){
                            sh 'ls ../curation/upheno-release'
                            sh 'ls ../curation/upheno-release/all'
                        }
                    }

                    // Move the products to somewhere "safe".
                    archiveArtifacts artifacts: "src/curation/upheno-release/all/*",
                    onlyIfSuccessful: true

                    // Now that the files are safely away onto skyhook for
                    // debugging, test for the core dump.
                    script {
                        if( WE_ARE_BEING_SAFE_P == 'TRUE' ){
                            def found_core_dump_p = fileExists 'target/core_dump.owl'
                            if( found_core_dump_p ){
                                error 'ROBOT core dump detected--bailing out.'
                            }
                        }
                    }

                    sh '''#!/bin/bash
                    set -e
                    scp -pr $RELEASEDIR/{upheno-release,upheno-stats,pattern-matches,qc} monarch@monarch-ttl-prod:$TARGETDIR/$START_DATE/
                    scp -pr $RELEASEDIR/{upheno-release,upheno-stats,pattern-matches,qc} monarch@monarch-ttl-prod:$TARGETDIR/current/
                    scp -p $RELEASEDIR/upheno_id_map.txt monarch@monarch-ttl-prod:$TARGETDIR/$START_DATE/upheno_id_map.txt
                    scp -p $RELEASEDIR/upheno_id_map.txt monarch@monarch-ttl-prod:$TARGETDIR/current/upheno_id_map.txt
                    '''
                }

            }
        }

        // stage('Archive') {
        //     when { anyOf { branch 'release'; branch 'snapshot'; branch 'master' } }
        //     steps {
        //  // Stanza to push to real file server.
        //     }
        // }
    }

    post {
        // Let's let our people know if things go well.
        success {
            script {
            echo "There has been a successful run of the ${env.BRANCH_NAME} pipeline."
            }
        }

        // Let's let our internal people know if things change.
        changed {
            echo "There has been a change in the ${env.BRANCH_NAME} pipeline."
        }
    // Let's let our internal people know if things go badly.
        failure {
            echo "There has been a failure in the ${env.BRANCH_NAME} pipeline."
            //mail bcc: '', body: "There has been a pipeline failure in ${env.BRANCH_NAME}. Please see: ${env.JOB_DISPLAY_URL}", cc: '', from: '', replyTo: '', subject: "Pipeline FAIL for ${env.ONTOLOGY_FILE_HINT} on ${env.BRANCH_NAME}", to: "${TARGET_ADMIN_EMAILS}"
        }
    }
}