当前位置: 首页 > 知识库问答 >
问题:

詹金斯管道从不同分支的供应链管理不工作

王扬
2023-03-14

我在Jenkins的环境中使用管道,该环境已经从SCM配置了管道脚本,然后将groovy文件用于管道中的阶段/作业。此脚本位于主分支中的Bitbucket上。

每次jenkins jobs启动时,它都会调用master branch,它会毫无问题地运行,管道的各个阶段都会运行。

现在,我在bitbucket上创建了一个新分支,并修改了groovy文件以包含更多的步骤(如运行单元测试和其他内容),我希望jenkins使用我指定的分支(我创建的分支)运行该脚本。

问题是,即使我在“分支说明符”中指定了我的分支,jenkins仍然运行主分支。下面是我配置的一些图像
如何指定要在SCM的管道脚本上运行的分支?

Lightweight checkout support not available, falling back to full checkout.
Checking out git git@bitbucket.xxxxxx/xxxxxx.git into /data/jobs/extractor-pipeline-test-dev/workspace@script to read extractor-dev/Jenkinsfile
Cloning the remote Git repository
Cloning repository git@bitbucket.org:xxxxxx/xxxxxxxxxx.git
 > /usr/bin/git init /data/jobs/extractor-pipeline-test-dev/workspace@script # timeout=10
Fetching upstream changes from git@bitbucket.org:xxxx/xxxxxx.git
 > /usr/bin/git --version # timeout=10
 > /usr/bin/git fetch --tags --progress git@bitbucket.org:xxxxxx/deploy.git +refs/heads/*:refs/remotes/origin/*
 > /usr/bin/git config remote.origin.url git@bitbucket.org:xxxxx/deploy.git # timeout=10
 > /usr/bin/git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > /usr/bin/git config remote.origin.url git@bitbucket.org:xxxxxxx/deploy.git # timeout=10
Fetching upstream changes from git@bitbucket.org:xxxxx/deploy.git
 > /usr/bin/git fetch --tags --progress git@bitbucket.org:grydev/gp_deploy.git +refs/heads/*:refs/remotes/origin/*
**Seen branch in repository origin/DEVOPS-568-pipeline-ci
Seen branch in repository origin/dev
Seen branch in repository origin/master**
Seen 3 remote branches
 > /usr/bin/git tag -l # timeout=10
Checking out Revision e3270789a8181b26464f878bfccdf39b3fdabcb0 (master)
Commit message: " ....."
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f e3270789a8181b26464f878bfccdf39b3fdabcb0
 > /usr/bin/git rev-list e3270789a8181b26464f878bfccdf39b3fdabcb0 # timeout=10

这是groovy文件,但groovy文件执行将要部署的代码步骤。它没有运行任何jenkin脚本。其中“master”是要部署的maser代码,而不是部署脚本。

Groovy文件:

def call(body) {

    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()

    def artifactName = 'imp'
    def artifactExt = '.war'
    def artifactVersion = '0.0.1'

    def buildPath = 'target/'
    def warFile = artifactName + '-' + artifactVersion + artifactExt
    def warPath = buildPath + warFile
    def warNoVersion = artifactName + artifactExt

    def deployPath = '/var/lib/tomcat8/webapps/'
    def deployFile = deployPath + warNoVersion

    node {
        // Clean workspace before doing anything
        //deleteDir()

        try {

            stage ('Code Checkout') {
                git branch: 'master',
                    credentialsId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
                    url: 'ssh://git@bitbucket.org/xxxxx/xxxximporter'

共有3个答案

阙阳
2023-03-14

我在这里遇到了完全相同的问题,并且尝试了很多次。事实证明,脚本路径中指定的Jenkinsfile只能从git默认url获得,决不能使用我们在分支中指定的分支来构建

为了避免这种情况,我必须使用多分支管道。。。。

邵毅
2023-03-14

对我来说,上面提到的任何一种方法都没有帮助。

它似乎Git参数插件传递分支作为'起源/

> git fetch --tags --force --progress -- ssh://git@***************/group/repo.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse "refs/remotes/origin/origin/devel^{commit}" # timeout=10
> git rev-parse "refs/remotes/origin/refs/heads/origin/devel^{commit}" # timeout=10
> git rev-parse "refs/heads/origin/devel^{commit}" # timeout=10

我无法将Jenkinsfile与“refs/tags/${TAG}”一起使用。

此外,当“轻量级结账”未被选中时,工作总是失败

秋煌
2023-03-14

问题是,即使Jenkinsfile来自所需的分支,代码检查也是通过“主”分支进行的。原因是代码检查是来自“代码检查阶段”的分支“主人”。更改代码如下:

try {
    stage ('Code Checkout') {
        git branch: 'REQUIRED BRANCH',
            credentialsId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            url: 'ssh://git@bitbucket.org/xxxxx/xxxximporter'

另一个更好的选择是提供GIT BRANCH作为Jenkins作业的参数。下面是快照。

更新:这可以通过安装git参数插件来实现。

并在“代码检查”阶段添加以下代码片段,并相应地进行更改。这里"git分支"是从构建传递的参数

 checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: gitbranch]], doGenerateSubmoduleConfigurations: false,    
extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '********', url: '**********']]]
 类似资料:
  • 问题内容: 我正在尝试设置一个参数化的版本。构建参数之一是分支名称,我希望TFS插件从那里获取项目。 是否可以将构建参数传递给TFS SCM插件的“项目路径”变量。(如果是,如何?我已经尝试了几种方法,但是似乎没有用) 此变量: TFS项目路径 问题答案: 我认为无法在Jenkins中将变量用于Project路径。项目路径需要在服务器上注册的项目名称。没有定义变量的地方。 项目路径的描述为: Te

  • 问题内容: 已解决 :感谢S.Richmond的以下答复我需要取消所有类型的存储映射,这意味着将变量和使用后作废。 附加 :搜索此错误的人员可能有兴趣使用Jenkins管道步骤- 在此处查找更多信息。 我正在尝试使用Jenkins Pipeline从用户那里获取输入,该输入作为json字符串传递给作业。管道然后使用隔离器对此进行解析,然后选择重要信息。然后,它将使用该信息与不同的作业参数并行运行1

  • 下面是我简单的jenkins pipeline groovy脚本,它将用这两个阶段和我们想要构建的作业创建一个管道,我希望在job configuration下的脚本中每次都更新用于构建和代码分析的作业名,方法是从用户界面中获取数据,用户将使用Eclipse提供构建作业名和代码分析作业名- jenkinsfile脚本:-

  • 我有一个Jenkins管道,其中有10个作业被配置为在post build操作中一个接一个地运行。只要与作业相关的git代码发生更改,就会触发构建,并运行以下所有作业,尽管没有提交作业代码的其余部分。 例如,在一系列的10个工作在管道中,如果有一个代码变化在第二个工作,但没有在第三个工作,那么我想跳过第二个工作,直接构建第三个工作。同样,任何代码没有更改的作业都希望跳过并跳到下面的作业。 配置更改

  • 问题内容: 我正在使用Pipeline插件运行Jenkins 2。我已经建立了一个多分支管道项目,其中每个分支(主分支,开发分支等)的根目录都有一个Jenkinsfile。设置起来很简单。但是,即使代码没有更改,如何使每个分支定期运行(而不是分支索引)也让我迷惑不解。我需要在Jenkinsfile中添加什么以启用定期构建? 问题答案: 如果您使用声明式样式Pipeline并且只想触发特定分支上的构

  • 问题内容: 我正在创建一个示例詹金斯管道,这是代码。 该管道失败,并显示以下错误日志 但是,当我从此url执行以下示例时,它将成功执行并打印else部分。 我可以看到的唯一区别是在工作示例中没有,但在我的情况下有。 这是怎么了,有人可以建议吗? 问题答案: 您的第一个尝试是使用声明性管道,第二个可以使用的是脚本化管道。您需要将步骤括在步骤声明中,并且不能用作声明式的顶层步骤,因此需要将其包装在步骤