Prevent Archiving In a Pipeline

48 views
Skip to first unread message

Ricardo Torres

unread,
Jan 21, 2019, 10:47:56 AM1/21/19
to Jenkins Users

I have an upstream component, libraryA, I build, archive, and deploy via a Maven job, jobA. This works great. I have a downstream Maven job, jobB, that has a dependency on libraryA. This also works great, except…

 

I have a completely separate pipeline job, pipelineA specified by Jenkinsfile. Within that Jenkinsfile, I build a specific branch of libraryA I don’t want archived or deployed. In my Jenkinsfile I have “withMaven(mavenLocalRepo: ‘libraryA/.repository’, publisherStrategy: ‘EXPLICIT’)”, and inside that, “sh “””[…]mvn clean package sonar:sonar[…]””” (Any typos here are probably the fault of my typing here as I did not copy-paste. There are no errors from Jenkins when executing these steps.) I have also tried “options: [artifactsPublisher(disabled: true)]” in place of “publisherStrategy: ‘EXPLICIT’” and had the same results. I have verified when pipelineA builds libraryA, it does NOT get deployed to my remote Maven repository, and I expect it not to get deployed there. Good.

 

So, what happens?

 

Well, if I build pipelineA followed by jobB, jobB gets its copy of libraryA from pipelineA, causing the build to fail. If I then run jobA, jobB succeeds as expected.

 

I could change the version of libraryA in the branch pipelineA builds, but I’d rather not do that as it’s not correct for my particular use case. What else could I do? What did I miss? (I do not admin this Jenkins instance, so my access is limited in that respect.)

Cuong Tran

unread,
Jan 22, 2019, 11:43:44 PM1/22/19
to Jenkins Users
It seems to me you're leaving out some important details.  If you don't use "mvn install" in pipelineA and not sharing maven repo, I don't see how jobB would be getting the out generated by pipelineA.

Ricardo Torres

unread,
Jan 23, 2019, 12:01:19 PM1/23/19
to Jenkins Users
I agree, jobB should not be getting the "bad" libraryA. I DO a mvn install, but explicitly to a separate local repo. For clarity here is an approximation of the pipeline's Jenkinsfile:

#!groovy

pipeline {

    environment {

        GIT_CREDENTIAL_ID = 'git_credential_name'

    }

 

    agent any

    tools {

        maven 'internal_maven'

        jdk 'openjdk'

        git 'internal_git'

    }

    stages {

        stage('Build Parent') {

            steps {

                checkoutRepos([[checkoutDir: 'parent', branch: 'gold', url: 'ssh://git@fake-git-url/parent.git']], env.GIT_CREDENTIAL_ID)

                withMaven(publisherStrategy: 'EXPLICIT') {

                    sh """

                        cd parent

                        mvn -U clean verify

                      """

                }

                stash name: 'parent', includes: 'pom.xml'

            }

        }

        stage('Build libraryParent') {

            steps {

                unstash 'parent'

                checkoutRepos([[checkoutDir: 'libraryParent', branch: 'gold', url: 'ssh://git@fake-git-url/libraryParent.git']], env.GIT_CREDENTIAL_ID)

                withMaven(mavenLocalRepo: 'libraryParent/.repository', publisherStrategy: 'EXPLICIT') {

                    sh """

                        mvn install:install-file -Dpackaging=pom -Dfile=pom.xml -DpomFile=pom.xml

                        cd libraryParent

                        mvn clean verify -P jacoco sonar:sonar -U -Dsonar.host.url=https://fake-sonar-url -Dsonar.scm.provider=git

                       """

                }

                dir('libraryParent/libraryA/target/') {

                    stash name: 'libraryA', includes: 'libraryA-1000-SNAPSHOT.jar'

                }

            }

        }

        stage('Build appA') {

            steps {

                sonarAnApp 'appA'

            }

        }

        stage('Build appB') {

            steps {

                sonarAnApp 'appB'

            }

        }

        stage('Build appC') {

            steps {

                sonarAnApp 'appC'

            }

        }

    }

}

 

def sonarAnApp(final String appName) {

    unstash 'parent'

    unstash 'libraryA'

    checkoutRepos([[checkoutDir: appName, branch: 'gold', url: "ssh://git@fake-git-url/${appName}.git"]], env.GIT_CREDENTIAL_ID)

    withMaven(mavenLocalRepo: "$appName/.repository", publisherStrategy: 'EXPLICIT') {

        sh """

            mvn install:install-file -Dpackaging=pom -Dfile=pom.xml -DpomFile=pom.xml

            mvn install:install-file -Dfile=libraryA-1000-SNAPSHOT.jar

            cd $appName

            mvn clean verify -P jacoco sonar:sonar -U -Dsonar.host.url=https://fake-sonar-url -Dsonar.scm.provider=git

           """

    }

}
Reply all
Reply to author
Forward
0 new messages