#!/usr/bin/env groovy /* * Copyright (C) 2020 - present Instructure, Inc. * * This file is part of Canvas. * * Canvas is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, version 3 of the License. * * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License along * with this program. If not, see . */ library "canvas-builds-library@${env.CANVAS_BUILDS_REFSPEC}" pipeline { agent none options { ansiColor('xterm') timeout(time: 22) timestamps() } environment { JENKINS = 'true' DOCKER = 'true' } stages { stage('Environment') { steps { script { protectedNode(configuration.nodeLabel()) { stage('Setup') { // always pull from gerrit refspec to test the changed docker dev code checkoutRepo('canvas-lms', env.GERRIT_REFSPEC, 1) sh '''#!/bin/bash cat < docker-compose.local.jenkins.yml version: '2.3' services: web: environment: CANVAS_LMS_ADMIN_EMAIL: jenkins@fake.com CANVAS_LMS_ADMIN_PASSWORD: iamjenkins CANVAS_LMS_STATS_COLLECTION: opt_out CANVAS_LMS_ACCOUNT_NAME: 'School of Butters' EOF ''' } stage('Copy Canvas Config') { sh '''#!/bin/bash cp -vr docker-compose/config/*.yml config/ cp -vr config/docker-compose.override.yml.example docker-compose.override.yml sed -i "/- .:\\/usr\\/src\\/app/d" ./docker-compose.override.yml sed -i "s/instructure\\/ruby-passenger/local\\/ruby-passenger/g" ./Dockerfile echo -n "COMPOSE_FILE=docker-compose.yml:docker-compose.override.yml:docker-compose.local.jenkins.yml" > .env ''' } stage('Copy App Directory') { sh """#!/bin/bash set -o errexit -o errtrace -o nounset -o pipefail -o xtrace CONTAINER="\$(docker create instructure/ruby-passenger:${configuration.getString('ruby')})" docker cp ./ "\$CONTAINER:/usr/src/app/" docker start \$CONTAINER docker exec -i --user root \$CONTAINER chown -R docker:docker /usr/src/app/ docker commit \$CONTAINER "local/ruby-passenger:${configuration.getString('ruby')}" """ } stage('Build Canvas') { sh '''#!/bin/bash set -o errexit -o errtrace -o nounset -o pipefail -o xtrace source script/common/canvas/build_helpers.sh build_images docker_compose_up build_assets ''' } stage('Create DB and Migrate') { sh '''#!/bin/bash set -o errexit -o errtrace -o nounset -o pipefail -o xtrace source script/common/canvas/build_helpers.sh create_db ''' } stage('Start Canvas Container') { sh 'docker-compose up -d' } stage('Test') { sh 'docker-compose exec -T web bundle exec rspec spec/controllers/oauth2_provider_controller_spec.rb -fd' } } //protectedNode } //script } //steps } //environment } //stages post { unsuccessful { script { def causes = currentBuild.getBuildCauses()[0].shortDescription if (causes.contains('Started by timer')) { slackSend( channel: '#flaky-spec-alerts', color: 'danger', message: "${env.JOB_NAME} failed! Build <${env.BUILD_URL}|#${env.BUILD_NUMBER}>\n" ) } } } } } //pipeline