I have a Jenkins pipeline that checks out more than what I would have done had I just typed into the command line. I'd like to get Jenkins to check out my requested branch and only that branch, though if it wants to log changes, that's fine. I'm not sure why but when using the Jenkins plug in for Git it takes a simple git clone or checkout and turns it into many statements, and in my case, about half are unintended.
Included is the pipeline configuration snippet related to SCM, my Jenkinsfile, and the console output.
Extracted from the console log, this makes sense:
Checking out git git@github.mycompany.com:SPRINT/ssc-file-generator.git into /var/jenkins_home/jobs/ssc-
cost-file-generator-dev/workspace@script to read Jenkinsfile-test
using credential cost_git
I think the following gets a commit hash code (not sure why it's needed but OK)
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
This does some magic that I don't know why:
> git config remote.origin.url git@github.mycompany.com:SPRINT/ssc-file-generator.git # timeout=10
Fetching differences (ok, I can appreciate this)
Fetching upstream changes from git@github.mycompany.com:SPRINT/ssc-file-generator.git
> git --version # timeout=10
using GIT_SSH to set credentials Cost (dpydalsprd101.sl.cloud.mycompany.com, /home/cost/.ssh )
> git fetch --tags --force --progress -- git@github.mycompany.com:SPRINT/ssc-file-generator.git +refs/heads/*:refs/remotes/origin/* # timeout=10
I think the following fetches changes for my specific feature branch
> git rev-parse refs/remotes/origin/feature/my_feature^{commit} # timeout=10
Somehow, for some reason, it decided to fetch info on a feature I don't have nor know where this comes from (questioning this)
> git rev-parse refs/remotes/origin/origin/feature/my_feature^{commit} # timeout=10
Huh??
> git config core.sparsecheckout # timeout=10
The following checks out a known and intended hashcode in my feature branch. I agree with it
> git checkout -f ba939d0874a55bcbacf5691deafdca48a2bd7104 # timeout=10
Commit message: "Jenkinsfile update"
I don't know why it requests this (Another part of the question)
> git rev-list --no-walk 388bc6908ad282c4896d6fa401ba4c6789bd04f6 # timeout=10
Finally, it tells me it's checking out what I really wanted.
Checking out git git@github.mycompany.com:SPRINT/ssc-file-generator.git into /var/jenkins_home/jobs/ssc-cost-file-generator-dev/workspace@script to read Jenkinsfile-cloud-test
using credential cost_git
Then it really goes off the rails and does this:
> git config remote.origin.url git@github.mycompany.com:SPRINT/cost-ssc-file-generator.git # timeout=10
Fetching upstream changes from git@github.mycompany.com:SPRINT/cost-ssc-file-generator.git
> git --version # timeout=10
using GIT_SSH to set credentials cost (dpydalsprd101.sl.cloud.mycompany.com, /home/bluecost/.ssh )
> git fetch --tags --progress git@github.mycompany.com:SPRINT/cost-ssc-file-generator.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/proj-test^{commit} # timeout=10
Checking out Revision 99166f03eda38b4ed837182f0a3017da2c20d33e (refs/remotes/origin/proj-test)
Commit message: "Merge pull request #67 from SPRINT/proj-dev"
First time build. Skipping changelog.
[Pipeline] sh
> git rev-parse refs/remotes/origin/origin/proj-test^{commit} # timeout=10
> git config core.sparsecheckout # timeout=10
> git checkout -f 99166f03eda38b4ed837182f0a3017da2c20d33e # timeout=10
> git branch -a -v --no-abbrev # timeout=10
> git branch -D proj-test # timeout=10
> git checkout -b proj-test 99166f03eda38b4ed837182f0a3017da2c20d33e # timeout=10
It begins with the configuration pipeline options:
SCM: Git
Repositories
Repostory URL: git@github.mycompany.com:SPRINT/ssc-file-generator.git
Credentials: <Jenkins credential>
Branches to build:
Branch Specifier (blank for 'any'): */feature/my_feature
Repository browser: (Auto)
Additional Behaviors: <none specified>
Script Path: Jenkinsfile-test
Lightweight checkout: <not checked>
Jenkinsfile-test
#!groovy
node('bcjenkins101'){
def server = Artifactory.newServer url: 'https://na.artifactory.swg-devops.com/artifactory', credentialsId: 'cost_artifactory'
def PASS_SLACK_CHANNEL = '#jenkins-build'
def FAIL_SLACK_CHANNEL = '#jenkins-fail-squad1'
def SLACK_DOMAIN_CREDENTIALS = 'slack-dom-ID'
def CLOUD_REG = 'registry.cloud.mycompany.com'
def CLOUD_PROJ = 'sprint-cost'
def rtMaven = Artifactory.newMavenBuild()
def rtDocker = Artifactory.docker server: server
def buildInfo = Artifactory.newBuildInfo()
def hasReachedDockerComposeUp = false;
def IMAGE_NAME="chq-sprint-images-docker-local.artifactory.swg-devops.com/ssc-cost-file-generator"
def SERVICE_NAME = 'ssc-file-generator'
def BRANCH_NAME = 'feature/migrate_to_cloud_2'
try{
env.SLACK_CHANNEL = PASS_SLACK_CHANNEL
env.SLACK_DOMAIN = 'mycompany-sprint'
env.SLACK_CREDENTIALS = SLACK_DOMAIN_CREDENTIALS
env.CHANGE_LIST = 'true'
env.TEST_SUMMARY = 'true'
env.BRANCH_NAME= 'proj-test'
env.NOTIFY_SUCCESS = 'true'
env.DISPLAY = 'server.sl.bluecloud.mycompany.com:1'
env.CLOUD_REGISTRY = "${CLOUD_REG}/${CLOUD_PROJ}"
stage('Clone Git'){
git url: 'git@github.mycompany.com:SPRINT/ssc-file-generator.git', branch: "${env.BRANCH_NAME}", credentialsId: 'cost_git'
sh 'ls -la'
}
stage ('Artifactory config') {
rtMaven.tool = 'Maven 3.5.3'
rtMaven.deployer releaseRepo: 'sprint-libs-release-maven-local', snapshotRepo: 'sprint-libs-release-maven-local', server: server
rtMaven.resolver releaseRepo: 'sprint-cost-libs-maven-virtual', snapshotRepo: 'sprint-bluecost-libs-maven-virtual', server: server
buildInfo = Artifactory.newBuildInfo()
}
stage ('Build/Test'){
rtMaven.run pom: 'pom.xml', goals: 'clean package', buildInfo: buildInfo
junit(testResults: 'backend/target/surefire-reports/*xml', allowEmptyResults: true)
}
stage ('Exec Maven') {
rtMaven.run pom: 'pom.xml', goals: '-Dproject.build.sourceEncoding=UTF-8 -Dproject.reporting.outputEncoding=UTF-8 clean package -DskipTests -Dskip.surefire.tests=true -Dskip.failsafe.tests=true', buildInfo: buildInfo
junit(testResults: 'target/surefire-reports/*.xml', allowEmptyResults: true)
}
stage("Build, Tag and Push File-Generator Dockerfile"){
tagDockerApp = "${env.CLOUD_REGISTRY}/${SERVICE_NAME}:${BUILD_NUMBER}"
echo "Docker build image"
def dockerfile = 'Dockerfile-cloud'
echo "Docker push for the BUILD_NUMBER: ${BUILD_NUMBER}" + " push to " + "${CLOUD_REG}/${CLOUD_PROJ}"
docker.withRegistry('https://registry.cloud.mycompany.com', 'cost_byoi_rules-service_pushbot') {
def cloudImage = docker.build(tagDockerApp, "-f ${dockerfile} ./")
cloudImage.push()
}
}
stage('Build & push docker images')
{
tagDockerApp = "${env.CLOUD_REGISTRY}/${SERVICE_NAME}:${BUILD_NUMBER}"
echo "Docker build image"
def dockerfile = 'Dockerfile-cloud'
// docker.build(tagDockerApp, "-f ${dockerfile} ./")
echo "Docker push for the BUILD_NUMBER: ${BUILD_NUMBER}" + " push to " + "${CLOUD_REG}/${CLOUD_PROJ}"
docker.withRegistry('https://registry.cloud.mycompany.com', 'cost_byoi_rules-service_pushbot') {
def cloudImage = docker.build(tagDockerApp, "-f ${dockerfile} ./")
cloudImage.push()
}
}
stage('Set image tag to :approved'){
hasReachedDockerComposeUp=false;
REPO = "chq-sprint-images-docker-local"
sh "docker tag ${IMAGE_NAME}:test ${IMAGE_NAME}:approved"
buildInfo = rtDocker.push("${IMAGE_NAME}:approved", REPO , buildInfo)
server.publishBuildInfo buildInfo
}
}catch(error){
currentBuild.result ='FAILURE'
env.SLACK_CHANNEL = FAIL_SLACK_CHANNEL
throw error
} finally {
sh '''
docker image prune -f
docker volume prune -f
'''
// notifier.notifyResult()
}
}
Jenkins console output
Started by user <my_email>
Checking out git git@github.mycompany.com:SPRINT/ssc-file-generator.git into /var/jenkins_home/jobs/ssc-cost-file-generator-dev/workspace@script to read Jenkinsfile-test
using credential cost_git
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url git@github.mycompany.com:SPRINT/ssc-file-generator.git # timeout=10
Fetching upstream changes from git@github.mycompany.com:SPRINT/ssc-file-generator.git
> git --version # timeout=10
using GIT_SSH to set credentials Cost (dpydalsprd101.sl.cloud.mycompany.com, /home/cost/.ssh )
> git fetch --tags --force --progress -- git@github.mycompany.com:SPRINT/ssc-file-generator.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/feature/my_feature^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/feature/my_feature^{commit} # timeout=10
Checking out Revision ba939d0874a55bcbacf5691deafdca48a2bd7104 (refs/remotes/origin/feature/my_feature)
> git config core.sparsecheckout # timeout=10
> git checkout -f ba939d0874a55bcbacf5691deafdca48a2bd7104 # timeout=10
Commit message: "Jenkinsfile update"
> git rev-list --no-walk 388bc6908ad282c4896d6fa401ba4c6789bd04f6 # timeout=10
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on bcjenkins_slave_dpydalsprd101 in /home/bcjenkins/Taas_Jenkins/workspace/ssc-cost-file-generator-dev
[Pipeline] {
[Pipeline] newArtifactoryServer
[Pipeline] newMavenBuild
[Pipeline] newBuildInfo
[Pipeline] stage
[Pipeline] { (Clone Git)
[Pipeline] git
using credential cost_git
Fetching changes from the remote Git repository
> git rev-parse --is-inside-work-tree # timeout=10
> git config remote.origin.url git@github.mycompany.com:SPRINT/ssc-file-generator.git # timeout=10
Fetching upstream changes from git@github.mycompany.com:SPRINT/ssc-file-generator.git
> git --version # timeout=10
using GIT_SSH to set credentials Cost (dpydalsprd101.sl.cloud.mycompany.com, /home/cost/.ssh )
> git fetch --tags --progress git@github.mycompany.com:SPRINT/ssc-file-generator.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/proj-test^{commit} # timeout=10
Checking out Revision 99166f03eda38b4ed837182f0a3017da2c20d33e (refs/remotes/origin/proj-test)
Commit message: "Merge pull request #67 from SPRINT/proj-dev"
First time build. Skipping changelog.
[Pipeline] sh
> git rev-parse refs/remotes/origin/origin/proj-test^{commit} # timeout=10
> git config core.sparsecheckout # timeout=10
> git checkout -f 99166f03eda38b4ed837182f0a3017da2c20d33e # timeout=10
> git branch -a -v --no-abbrev # timeout=10
> git branch -D proj-test # timeout=10
> git checkout -b proj-test 99166f03eda38b4ed837182f0a3017da2c20d33e # timeout=10
+ ls -la
<my file list in workspace. Here I can see it doesn't have my version>
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Artifactory config)
[Pipeline] newBuildInfo
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build/Test)
[Pipeline] artifactoryMavenBuild
Jenkins Artifactory Plugin version: 3.6.2
Artifactory integration is enabled