auto-semver/Jenkinsfile

145 lines
4.5 KiB
Plaintext
Raw Normal View History

2019-07-16 14:38:46 -04:00
library('pipeline-library')
2019-04-11 13:42:18 -04:00
pipeline {
options { timestamps() }
agent any
environment {
2019-12-20 14:27:44 -05:00
GITHUB_URL = 'git@github.com:RightBrain-Networks/auto-semver.git'
2019-12-20 11:29:04 -05:00
GITHUB_KEY = 'rbn-ops github'
2019-12-20 11:58:23 -05:00
DOCKER_CREDENTIALS = 'rbnopsDockerHubToken'
2019-12-20 11:29:04 -05:00
2019-12-20 14:27:44 -05:00
SERVICE = 'auto-semver'
SELF_SEMVER_TAG = "master" //Image tag to use for self-versioning
2019-04-11 14:59:37 -04:00
2019-12-20 12:16:11 -05:00
}
2019-04-11 13:42:18 -04:00
stages {
2019-04-11 14:59:37 -04:00
//Runs versioning in docker container
2019-11-22 15:37:53 -05:00
stage('Self Version') {
2019-04-11 13:42:18 -04:00
steps {
2019-12-20 12:16:11 -05:00
withCredentials([usernamePassword(credentialsId: env.DOCKER_CREDENTIALS, usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
sh("docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}")
}
2019-12-20 14:24:29 -05:00
runAutoSemver("rightbrainnetworks/auto-semver:${SELF_SEMVER_TAG}")
2019-04-11 13:42:18 -04:00
}
2019-04-11 14:59:37 -04:00
post{
// Update Git with status of version stage.
success {
updateGithubCommitStatus(GITHUB_URL, 'Passed version stage', 'SUCCESS', 'Version')
}
failure {
updateGithubCommitStatus(GITHUB_URL, 'Failed version stage', 'FAILURE', 'Version')
}
}
2019-04-11 13:42:18 -04:00
}
stage('Build') {
steps {
echo "Building ${env.SERVICE} docker image"
// Docker build flags are set via the getDockerBuildFlags() shared library.
2019-12-20 14:23:10 -05:00
sh "docker build ${getDockerBuildFlags()} -t rightbrainnetworks/auto-semver:${env.VERSION} ."
2019-04-11 13:42:18 -04:00
2019-08-05 13:15:52 -04:00
sh "python setup.py sdist"
stash includes: "dist/semver-${env.SEMVER_NEW_VERSION}.tar.gz", name: 'PACKAGE'
2019-04-11 13:42:18 -04:00
}
post{
// Update Git with status of build stage.
success {
updateGithubCommitStatus(GITHUB_URL, 'Passed build stage', 'SUCCESS', 'Build')
}
failure {
updateGithubCommitStatus(GITHUB_URL, 'Failed build stage', 'FAILURE', 'Build')
}
}
}
2019-12-27 18:11:43 -05:00
stage('Test') {
agent {
2020-06-15 17:44:58 -04:00
docker {
image "rightbrainnetworks/auto-semver:${env.VERSION}"
}
2019-12-27 18:11:43 -05:00
}
steps
{
dir('semver')
{
sh 'python tests.py'
}
}
post{
// Update Git with status of test stage.
success {
updateGithubCommitStatus(GITHUB_URL, 'Passed test stage', 'SUCCESS', 'Test')
}
failure {
updateGithubCommitStatus(GITHUB_URL, 'Failed test stage', 'FAILURE', 'Test')
}
}
}
2019-04-11 13:42:18 -04:00
stage('Push')
{
2019-12-20 11:54:46 -05:00
steps {
// Authenticate & push to DockerHub
2019-12-20 11:58:23 -05:00
withCredentials([usernamePassword(credentialsId: env.DOCKER_CREDENTIALS, usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
2019-12-20 11:54:46 -05:00
sh("""
docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}
2019-12-20 14:23:10 -05:00
docker push rightbrainnetworks/auto-semver:${env.VERSION}
2019-12-20 11:54:46 -05:00
""")
}
2019-04-11 13:42:18 -04:00
2019-12-20 11:54:46 -05:00
// Copy artifact to S3
sh "aws s3 cp `ls -t ./dist/semver-* | head -1` s3://rbn-ops-pkg-us-east-1/${env.SERVICE}/${env.SERVICE}-${env.VERSION}.tar.gz"
2019-04-11 13:42:18 -04:00
}
2019-04-11 13:45:34 -04:00
post
{
2019-04-11 13:42:18 -04:00
// Update Git with status of push stage.
success {
2019-04-11 13:45:34 -04:00
updateGithubCommitStatus(GITHUB_URL, 'Passed push stage', 'SUCCESS', 'Push')
2019-04-11 13:42:18 -04:00
}
failure {
2019-04-11 13:45:34 -04:00
updateGithubCommitStatus(GITHUB_URL, 'Failed push stage', 'FAILURE', 'Push')
2019-04-11 13:42:18 -04:00
}
}
}
2019-12-20 11:26:01 -05:00
stage('Publish Release')
{
when {
expression {
"${env.SEMVER_STATUS}" == "0" && "${env.BRANCH_NAME}" == "master"
}
}
steps
{
unstash 'PACKAGE'
2019-12-20 11:54:46 -05:00
// Create GitHub Release & Upload Artifacts
2019-12-20 11:26:01 -05:00
createGitHubRelease('rbn-opsGitHubToken', 'RightBrain-Networks/auto-semver', "${env.SEMVER_RESOLVED_VERSION}",
"${env.SEMVER_RESOLVED_VERSION}", ["auto-semver.tar.gz" : "dist/semver-${env.SEMVER_NEW_VERSION}.tar.gz"])
2019-12-20 11:54:46 -05:00
// Update DockerHub latest tag
sh("""
2019-12-20 14:23:10 -05:00
docker tag rightbrainnetworks/auto-semver:${env.VERSION} rightbrainnetworks/auto-semver:latest
docker push rightbrainnetworks/auto-semver:latest
2019-12-20 11:54:46 -05:00
""")
2019-12-20 11:26:01 -05:00
}
2019-12-20 11:27:49 -05:00
post
{
// Update Git with status of release stage.
success {
updateGithubCommitStatus(GITHUB_URL, 'Passed release stage', 'SUCCESS', 'Release')
}
failure {
updateGithubCommitStatus(GITHUB_URL, 'Failed release stage', 'FAILURE', 'Release')
}
}
2019-12-20 11:26:01 -05:00
}
2019-04-11 13:47:15 -04:00
}
2019-11-26 12:19:06 -05:00
post {
success { updateGithubCommitStatus(GITHUB_URL, 'Passed build and test', 'SUCCESS') }
failure { updateGithubCommitStatus(GITHUB_URL, 'Failed build and test', 'FAILURE') }
2019-04-11 13:48:29 -04:00
}
2019-04-11 13:42:18 -04:00
}