waku-org/go-waku

View on GitHub
ci/Jenkinsfile.docker

Summary

Maintainability
Test Coverage
pipeline {
  agent {
    label 'linux && x86_64'
  }

  parameters {
    string(
      name: 'GIT_REF',
      defaultValue: 'master',
      description: 'Branch, tag, or commit to build.'
    )
    string(
      name: 'IMAGE_NAME',
      description: 'Docker image name.',
      defaultValue: params.IMAGE_NAME ?: 'waku-org/go-waku',
    )
    string(
      name: 'IMAGE_TAG',
      description: 'Docker image tag.',
      defaultValue: getDefaultImageTag(params.IMAGE_TAG)
    )
    string(
      name: 'DOCKER_CRED',
      description: 'Name of Docker Registry credential.',
      defaultValue: params.DOCKER_CRED ?: 'harbor-wakuorg-robot',
    )
    string(
      name: 'DOCKER_REGISTRY_URL',
      description: 'URL of the Docker Registry',
      defaultValue: params.DOCKER_REGISTRY_URL ?: 'https://harbor.status.im'
    )

  }

  options {
    timestamps()
    buildDiscarder(logRotator(
      numToKeepStr: '10',
      daysToKeepStr: '30',
    ))
  }

  stages {
    stage('Build') {
      steps { script {
        image = docker.build(
          "${params.IMAGE_NAME}:${params.IMAGE_TAG ?: GIT_COMMIT.take(8)}",
          "--build-arg='GIT_COMMIT=${GIT_COMMIT.take(8)}' ."
        )
      } }
    }

    stage('Push') {
      when { expression { params.IMAGE_TAG != '' } }
      steps { script {
        withDockerRegistry([
          credentialsId: params.DOCKER_CRED, url: params.DOCKER_REGISTRY_URL
        ]) {
          image.push()
          /* If Git ref is a tag push it as Docker tag too. */
          if (params.GIT_REF ==~ /v\d+\.\d+\.\d+.*/) {
            image.push(params.GIT_REF)
          }
        }
      } }
    }
  }
  post {
    always { cleanWs() }
  }
}

def getDefaultImageTag(currentValue) {
  switch (env.JOB_BASE_NAME) {
    case 'docker-latest':  return 'latest'
    case 'docker-release': return 'stable'
    case 'docker-manual':  return ''
    default:               return currentValue
  }
}