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 }