github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/Jenkinsfile (about)

     1  node {
     2      cleanWs()
     3      def architectures = [
     4              [pkg: 'jfrog-cli-windows-amd64', goos: 'windows', goarch: 'amd64', fileExtention: '.exe'],
     5              [pkg: 'jfrog-cli-linux-386', goos: 'linux', goarch: '386', fileExtention: ''],
     6              [pkg: 'jfrog-cli-linux-amd64', goos: 'linux', goarch: 'amd64', fileExtention: ''],
     7              [pkg: 'jfrog-cli-linux-arm', goos: 'linux', goarch: 'arm', fileExtention: ''],
     8              [pkg: 'jfrog-cli-linux-arm64', goos: 'linux', goarch: 'arm64', fileExtention: ''],
     9              [pkg: 'jfrog-cli-mac-386', goos: 'darwin', goarch: 'amd64', fileExtention: '']
    10      ]
    11  
    12      subject = 'jfrog'
    13      repo = 'jfrog-cli'
    14      sh 'rm -rf temp'
    15      sh 'mkdir temp'
    16      def goRoot = tool 'go-1.12'
    17      env.GOROOT="$goRoot"
    18      env.PATH+=":${goRoot}/bin"
    19      env.GO111MODULE="on"
    20      env.JFROG_CLI_OFFER_CONFIG="false"
    21  
    22      dir('temp') {
    23          cliWorkspace = pwd()
    24          sh "echo cliWorkspace=$cliWorkspace"
    25          stage('Clone JFrog CLI sources') {
    26              sh 'git clone https://github.com/jfrog/jfrog-cli.git'
    27              dir("$repo") {
    28                  if (BRANCH?.trim()) {
    29                      sh "git checkout $BRANCH"
    30                  }
    31              }
    32          }
    33  
    34          stage('Build JFrog CLI') {
    35              jfrogCliRepoDir = "${cliWorkspace}/${repo}/"
    36              jfrogCliDir = "${jfrogCliRepoDir}jfrog-cli/jfrog"
    37              sh "echo jfrogCliDir=$jfrogCliDir"
    38  
    39              sh 'go version'
    40              dir("$jfrogCliRepoDir") {
    41                  sh './build.sh'
    42              }
    43  
    44              sh 'mkdir builder'
    45              sh "mv $jfrogCliRepoDir/jfrog builder/"
    46  
    47              // Extract CLI version
    48              sh 'builder/jfrog --version > version'
    49              version = readFile('version').trim().split(" ")[2]
    50              print "CLI version: $version"
    51          }
    52  
    53          stage('Download tools cert') {
    54              // Download the certificate file and key file, used for signing the JFrog CLI binary.
    55              sh """#!/bin/bash
    56                 builder/jfrog rt dl installation-files/certificates/jfrog/ --url https://entplus.jfrog.io/artifactory --flat --access-token=$DOWNLOAD_SIGNING_CERT_ACCESS_TOKEN
    57                  """
    58  
    59              sh 'tar xvzf jfrogltd_signingcer_full.tar.gz'
    60          }
    61  
    62          if ("$EXECUTION_MODE".toString().equals("Publish packages")) {
    63              stage('Npm Publish') {
    64                  print "publishing npm package"
    65                  publishNpmPackage(jfrogCliRepoDir)
    66              }
    67  
    68              stage('Build and Publish Docker Image') {
    69                  buildPublishDockerImage(version, jfrogCliRepoDir)
    70              }
    71          } else if ("$EXECUTION_MODE".toString().equals("Build CLI")) {
    72              print "Uploading version $version to Bintray"
    73              uploadCli(architectures)
    74          }
    75      }
    76  }
    77  
    78  def uploadCli(architectures) {
    79      for (int i = 0; i < architectures.size(); i++) {
    80          def currentBuild = architectures[i]
    81          stage("Build and upload ${currentBuild.pkg}") {
    82              buildAndUpload(currentBuild.goos, currentBuild.goarch, currentBuild.pkg, currentBuild.fileExtention)
    83          }
    84      }
    85  }
    86  
    87  def buildPublishDockerImage(version, jfrogCliRepoDir) {
    88      dir("$jfrogCliRepoDir") {
    89          docker.build("jfrog-docker-reg2.bintray.io/jfrog/jfrog-cli-go:$version")
    90          sh '#!/bin/sh -e\n' + 'echo $KEY | docker login --username=$USER_NAME --password-stdin jfrog-docker-reg2.bintray.io/jfrog'
    91          sh "docker push jfrog-docker-reg2.bintray.io/jfrog/jfrog-cli-go:$version"
    92          sh "docker tag jfrog-docker-reg2.bintray.io/jfrog/jfrog-cli-go:$version jfrog-docker-reg2.bintray.io/jfrog/jfrog-cli-go:latest"
    93          sh "docker push jfrog-docker-reg2.bintray.io/jfrog/jfrog-cli-go:latest"
    94      }
    95  }
    96  
    97  def uploadToBintray(pkg, fileName) {
    98      sh """#!/bin/bash
    99             builder/jfrog bt u $jfrogCliRepoDir/$fileName $subject/jfrog-cli-go/$pkg/$version /$version/$pkg/ --user=$USER_NAME --key=$KEY
   100          """
   101  }
   102  
   103  def buildAndUpload(goos, goarch, pkg, fileExtension) {
   104      def extension = fileExtension == null ? '' : fileExtension
   105      def fileName = "jfrog$fileExtension"
   106      dir("${jfrogCliRepoDir}") {
   107          env.GOOS="$goos"
   108          env.GOARCH="$goarch"
   109          sh "./build.sh $fileName"
   110  
   111          if (goos == 'windows') {
   112              dir("${cliWorkspace}/certs-dir") {
   113                  // Move the jfrog executable into the 'sign' directory, so that it is signed there.
   114                  sh "mv $jfrogCliRepoDir/$fileName ${jfrogCliRepoDir}sign/${fileName}.unsigned"
   115                  // Copy all the certificate files into the 'sign' directory.
   116                  sh "cp * ${jfrogCliRepoDir}sign/"
   117                  // Build and run the docker container, which signs the JFrog CLI binary.
   118                  sh "docker build -t jfrog-cli-sign-tool ${jfrogCliRepoDir}sign/"
   119                  def signCmd = "osslsigncode sign -certs workspace/JFrog_Ltd_.crt -key workspace/jfrogltd.key  -n JFrog_CLI -i https://www.jfrog.com/confluence/display/CLI/JFrog+CLI -in workspace/${fileName}.unsigned -out workspace/$fileName"
   120                  sh "docker run -v ${jfrogCliRepoDir}sign/:/workspace --rm jfrog-cli-sign-tool $signCmd"
   121                  // Move the JFrog CLI binary from the 'sign' directory, back to its original location.
   122                  sh "mv ${jfrogCliRepoDir}sign/$fileName $jfrogCliRepoDir"
   123              }
   124          }
   125      }
   126  
   127      uploadToBintray(pkg, fileName)
   128      sh "rm $jfrogCliRepoDir/$fileName"
   129  }
   130  
   131  def publishNpmPackage(jfrogCliRepoDir) {
   132      dir(jfrogCliRepoDir+'npm/') {
   133          sh '''#!/bin/bash
   134              echo "Downloading npm..."
   135              wget https://nodejs.org/dist/v8.11.1/node-v8.11.1-linux-x64.tar.xz
   136              tar -xvf node-v8.11.1-linux-x64.tar.xz
   137              export PATH=$PATH:$PWD/node-v8.11.1-linux-x64/bin/
   138              echo "//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN" > .npmrc
   139              echo "registry=https://registry.npmjs.org" >> .npmrc
   140              ./node-v8.11.1-linux-x64/bin/npm publish
   141          '''
   142      }
   143  }