防止在Jenkins管道中进行归档

时间:2019-01-29 20:36:06

标签: jenkins jenkins-pipeline

我在Jenkins mailing list上问了这个问题。

我有一个上游组件libraryA,我通过Maven作业jobA构建,归档和部署。这很好。我有一个下游Maven作业jobB,它依赖于libraryA。这也很棒,除了……

我有一个完全独立的管道作业,即Jenkinsfile指定的pipelineA。在该Jenkinsfile中,我构建了一个我不想存档或部署的libraryA的特定分支。在我的Jenkinsfile中,我有“ withMaven(mavenLocalRepo:'libraryA / .repository',PublisherStrategy:'EXPLICIT')”,以及其中的“ sh”“” […] mvn清洁包sonar:sonar [...]”””(这里的任何拼写错误可能都是我在此处键入错误的原因,因为我没有复制粘贴。执行这些步骤时,Jenkins没有错误。)我也尝试使用“选项:[artifactsPublisher(disabled:true)]”代替“ publisherStrategy:'EXPLICIT'”,结果相同。我已经验证了pipelineA构建libraryA时,它不会部署到我的远程Maven存储库中,并且我希望它不会被部署到那里。好。

那怎么办?

好吧,如果我先构建pipelineA,然后再构建jobB,则jobB从pipelineA获取它的库A副本,从而导致构建失败。如果然后运行jobA,jobB将按预期成功。

我可以在分支PipelineA构建中更改libraryA的版本,但我不愿意这样做,因为它不适用于我的特定用例。我还能做什么?我错过了什么? (我没有管理这个Jenkins实例,因此在这方面我的访问受到限制。)

为清楚起见,这里是管道的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

           """

    }
}

0 个答案:

没有答案