来自不同分支中SCM的Jenkins管道不工作
我在Jenkins的环境中使用管道,该环境已经从SCM配置了管道脚本,然后将groovy文件用于管道中的阶段/作业。此脚本位于主分支中的Bitbucket上 每次jenkins jobs启动时,它都会调用master branch,它会毫无问题地运行,管道的各个阶段都会运行 现在,我在bitbucket上创建了一个新分支,并修改了groovy文件以包含更多的步骤(如运行单元测试和其他内容),我希望jenkins使用我指定的分支(我创建的分支)运行该脚本 问题是,即使我在“分支说明符”中指定了我的分支,jenkins仍然运行主分支。以下是我配置的一些图像。来自不同分支中SCM的Jenkins管道不工作,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我在Jenkins的环境中使用管道,该环境已经从SCM配置了管道脚本,然后将groovy文件用于管道中的阶段/作业。此脚本位于主分支中的Bitbucket上 每次jenkins jobs启动时,它都会调用master branch,它会毫无问题地运行,管道的各个阶段都会运行 现在,我在bitbucket上创建了一个新分支,并修改了groovy文件以包含更多的步骤(如运行单元测试和其他内容),我希望jenkins使用我指定的分支(我创建的分支)运行该脚本 问题是,即使我在“分支说明符”中指定了我的
如何指定要在SCM的管道脚本上运行的分支 这是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'
问题是,即使Jenkins文件来自所需的分支,代码签出仍通过“主”分支进行原因是代码签出来自“代码签出阶段”中的分支“master”。更改代码如下:
try {
stage ('Code Checkout') {
git branch: 'REQUIRED BRANCH',
credentialsId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
url: 'ssh://git@bitbucket.org/xxxxx/xxxximporter'
另一个更好的选择是从Jenkins作业中提供GIT分支作为参数。下面是快照 更新: 这可以通过安装 并在“代码签出”阶段添加以下code snippet,并进行相应更改。这里,“gitbranch”是从build传递的参数
checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: gitbranch]], doGenerateSubmoduleConfigurations: false,
extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '********', url: '**********']]]
我在这里遇到了完全相同的问题,并且尝试了很多次。事实证明,脚本路径中指定的Jenkinsfile只能从git默认url获得,决不能使用我们在
分支中指定的分支来构建
为了避免这种情况,我必须使用多分支管道……在“分支说明符”中单击“添加分支”,然后再次放置所选分支。即使使用了环境变量,这也对我有效。对于我来说,上面提到的任何一种方法都没有帮助
Git参数插件似乎将分支作为“origin/”传递,但根据日志,它不会转换为有效的refspec:
> 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}”一起使用
此外,如果未选中“轻量级签出”,作业总是会失败,并出现“@script\Jenkinsfile not found”。一切看起来都很好……您是否验证了控制台输出中的提交id?……您是否可以通过隐藏机密信息来共享控制台输出……我在那里编辑并添加了它。可以看到3个分支,但主分支正在运行。我希望该作业运行我的分支“DEVOPS-568-pipeline-ci”,我包括开始运行主分支作业的部分。然后作业运行成功管道结束正常,但仅与主分支共享“签出scm”发生的管道脚本?脚本仅包含以下内容:@Library(“gp extractor deploy”)\uDeployExtractor{confiFileId=“extractor-conf.properties”serverIp='x.x.x'slackChannel='\xxxxx'}调用一个groovy文件,其中所有作业/步骤都运行{stage('Code Checkout')){git branch:'REQUIRED branch',凭证ID:'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',url:'ssh://git@bitbucket.org/xxxxx/xxximporter'此代码是要部署的代码之一,而不是进行部署的脚本的代码。我将检查您建议的第二部分另一个更好的选择是提供GIT BRANCH作为Jenkins作业的参数。下面是快照。为什么我在Jenkins中没有这个选项?这是一个插件还是我必须添加的东西?thanks@Guillermo-卡斯柯:如果新的更新有效,请将答案标记为已接受/向上投票,因为当其他人面临类似问题时,答案会有所帮助。它还没有,我上周五正在处理这个问题我添加了新的配置和新的插件,并且得到了建议,作业仍然在master上运行。我正在检查Jenkins配置,看看是否有不同之处。将检查并告知您。仍然在运行master:(它看到3个分支,但只运行master。这是我现在配置的映像。从git@bitbucket.org:xxxxxx/deploy.git>/usr/bin/git--version#timeout=10>/usr/bin/git fetch--tags--progressgit@bitbucket.org:xxxxxx/deploy.git+refs/heads/*:refs/remotes/origin/*已在存储库origin/DEVOPS-56中看到分支8-pipeline-ci-Seen-branch-in-repository-origin/dev-Seen-branch-in-repository-origin/master-Seen-3远程分支>/usr/bin/git show ref--tags-d#timeout=10签出修订版ccdf39b3fdabcb0(master)
> 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