当前位置: 首页 > 面试题库 >

Jenkins Copy Artifact解析复制的内部版本ID

邢小云
2023-03-14
问题内容

我在Jenkins 2.73.1中的多分支管道“
复制工件插件”中使用,以从其他两个管道中获得最后成功的工件,请参阅我的Jenkinsfile:

def branchname = "${BRANCH_NAME}".replace("/", "%2F")
pipeline {
  agent {
    label 'windows'
  }
  stages {
    stage('get artifacts') {
      steps {
        script {
          parallel('get-backend': {
            step([$class: 'CopyArtifact', projectName: "backend/${branchname}", target: 'input/backend'])
          },
          'get-frontend': {
            step([$class: 'CopyArtifact', projectName: "frontend/${branchname}", target: 'input/frontend'])
          })
        }
      }
    }
  }
}

在构建日志中,我看到例如:

...
[Pipeline] script
[Pipeline] {
[Pipeline] parallel
[Pipeline] [get-backend] { (Branch: get-backend)
[Pipeline] [get-frontend] { (Branch: get-frontend)
[Pipeline] [get-backend] step
[Pipeline] [get-frontend] step
[get-frontend] Copied 344 artifacts from "frontend » foo/bar" build number 17
[Pipeline] [get-frontend] }
[get-backend] Copied 2'287 artifacts from "backend » foo/bar" build number 3
[Pipeline] [get-backend] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // script
...

问题/目标:
我想将前端和后端的内部版本号解析并保存到文件中(先存档,然后由groovy加载并解析)(在日志中请参阅“内部版本号17”和“内部版本号3“)。

在“ Jenkins Pipeline-阅读上一阶段日志”问题中,我读到有可能将sh脚本的标准输出重定向到groovy变量,如下所示:

def out = sh script: 'command', returnStdout: true

但是在我的管道中,我需要使用Windows,在这种情况下,步骤也不是命令,而是一个“步骤”(包含类“
CopyArtifact”,对于Jenkins来说仍然是新的,我只是使其在谷歌搜索中工作并找到了一些使用这种语法)。

我如何实现我的目标?在这种情况下,我应该解析整个日志还是有一个更优雅的解决方案?请在您的答案中提供一些代码,以便我直接对其进行测试。


问题答案:

您可以将内部版本号写入上游作业中的文件,并将其包含在存档中。然后,您向前复制该工件。您可以使用管道实用程序步骤插件从文件中收集信息,但是如果您保持文件简单(即,除了内部版本号,就什么都不写),那么类似这样的东西会为您提供内部版本号:

def backendBuildId = sh script: "cat backendBuild.txt", returnStdout: true

或在Windows上:

def backendBuildId = bat script: "type backendBuild.txt", returnStdout: true


 类似资料:
  • 问题内容: 您如何使用既不使用自定义代码也不使用外部依赖关系(例如Shell脚本)的文件来编写: 生成格式major.minor.revision的内部版本号(例如 01.02.34 )。 在每次编译源代码时自动递增修订。 每次执行dist(ribution)任务时,都会自动增加次要版本。 另外: 提供增加主号码的选项。 提供增加小号的选项。 主编号递增时,次编号和修订版本号设置为0。 每当次要编

  • 我已经在本地计算机中配置了Maven3.0.3。已经安装了m2e eclipse插件。但是当我试图使用maven-archetype-webapp创建一个新的maven项目时,我会遇到以下异常。

  • 问题内容: 我在詹金斯有一份工作(称为BIGJOB);几个构建步骤是使用参数化触发器插件来触发其他作业(称为SMALLJOB)的构建,然后等待它们完成。我需要做的是从SMALLJOB上触发的构建中检索工件。 最初,我认为我可以使用Copy Artifact插件从触发的SMALLJOB的“最后构建”中检索工件。当一次仅运行一个SMALLJOB时,这确实可以可靠地工作。 但是我运行了多个BIGJOB,

  • 本文的内容基于 MOSN v0.9.0,commit id 1609ae14。 MOSN 在内存管理复用方面有 内存对象注册/管理 和 ByteBuffer/IOBuffer 复用 两部分内容。MOSN 最新的 master 分支用了 mod 管理依赖, 发现后一部分也迁移到了 vendor 目录下,可单独使用。下面就分这两部分来讲述 MOSN 的内存复用机制。 机制 简述一下两部分内容的机制,具

  • 问题内容: 我的问题与 iTunes Connect 中版本和内部版本号的限制有关。我们只允许3个非负整数,并且内部版本号必须是递增的。 我正在设置一个 Jenkins 作业,以将我的构建自动上传到 iTunes Connect, 以便测试人员可以下载它们。 问题: 我们如何确保递增的内部版本号?即使我们在每次提交之前都在Xcode中手动更改了它(这似乎是错误的),也有多个开发人员在项目上工作,所

  • 解决方法可能很简单,但我是个新手,所以请原谅我。甚至我也可以启动和play-around(创建对象、进行计算),下面的简单命令: 没用。上面写着: “语法错误:意外标识符”。 我正在尝试将此写入Node.js命令提示符。我正在使用Windows 10。