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

将jenkins工件后构建步骤转换为管道阶段

怀飞掣
2023-03-14

我正在将在UI中配置的Jenkins作业转换为使用声明性管道脚本配置的作业。

这是一个maven构建的Java项目,具有部署到Artifactory的构建后操作

构建和测试步骤很简单。我们可以使用这个UI

并将其转换为mvn命令sh“mvn clean install”

构建后步骤的配置在UI中很简单

选中了三个文本框

  1. 部署maven工件
  2. 过滤器从构建信息中排除了工件(我不认为有任何)
  3. 捕获并发布构建信息

这会生成并上传丰富的buildInfo。json并将正确的工件上传到我们的工件服务器。

我想用管道步骤替换它...阅读这个留档https://www.jfrog.com/confluence/display/RTF/Declarative管道语法建议构建maven作业应该通过让手工插件运行maven命令来完成。我想避免这种情况,因为我们目前没有这样做,我最终想消除在服务器上为这个项目存储工件的需要。

在pom中我们会看到

    <groupId>some.value</groupId>
    <artifactId>my-app</artifactId>
    <version>1.1.184</version>

我有一个部分工作的脚本:

stage('publish common code to artifactory') {
          steps {
            rtUpload (
                  serverId: 'Artifactory',
                  spec: '''{
                        "files": [
                          {
                            "pattern": "applications/my-app/pom.xml",
                            "target": "libs-release-local"
                          }
                       ]
                  }''',

                  buildName: 'my-app',
                  buildNumber: env.GIT_HASH_VERSION
              )
              rtPublishBuildInfo (
                    serverId: "Artifactory",
                    buildName: 'my-app',
                    buildNumber: env.GIT_HASH_VERSION
                )
          }
        }

这会将pom发布到artifactory,但最初会发布到some/value/my-app/my-app-1.1.184。pommy pipeline版本以/pom的形式发布到根目录。xml

艺术工厂看起来能够从pom中读取信息,并使用它来正确放置工件,而无需我编写代码,但如何呢?

共有1个答案

魏誉
2023-03-14

可以帮助某人的例子:

  stage("deploy_mvn") {
                environment {
                    // Must define environmental variable for maven
                    MAVEN_HOME = '/usr/share/maven'
                }
                steps {
                    script {
                        def artserver = Artifactory.newServer url: 'http://example.com/artifactory', credentialsId: 'blahblah'
                        def rtMaven = Artifactory.newMavenBuild()
                        rtMaven.resolver server: artserver, releaseRepo: 'my-repo', snapshotRepo: 'my-ss-repo'
                        rtMaven.deployer server: artserver, releaseRepo: 'my-local', snapshotRepo: 'my-snapshot-local'
                        rtMaven.deployer.artifactDeploymentPatterns.addInclude("*.pom").addInclude("*.war").addInclude("*.jar")
                        rtMaven.deployer.deployArtifacts = true
                        def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install'
                    }
                }
            }
 类似资料:
  • 在使用Jenkins管道的过程中,我将一些使用FreeStyle类型项目的旧构建转换为使用管道。旧的自由式建筑效果很好。 我的构建通常在容器环境中完成(通过SSH为该构建而展开),并以用于QA的SonarQube分析结束。 sonarqube步骤(使用Jenkins sonarqube插件)自动将带有正确参数的sonarqube扫描器注入到容器中,以连接到sonarqube服务器,如本例中Jenk

  • 问题内容: 仅在构建特定分支时,如何运行构建步骤/阶段? 例如,仅在调用分支的情况下才运行部署步骤,而其他所有都保持不变。 问题答案: 在声明性管道语法中执行相同的操作,以下是一些示例: 出现更有效的方法-https: //issues.jenkins- ci.org/browse/JENKINS-41187 另请 参阅- https://jenkins.io/doc/book/pipeline/

  • 仅当构建特定分支时,如何运行构建步骤/阶段? 例如,仅当分支被称为时才运行部署步骤,其他操作保持不变。

  • 根据Andrew Bayer的说法,您不应该向其他人注入声明性管道。将来可能会有人支持它,但可能不会。 我目前正在尝试在管道中启动一个管道,但我想知道我需要做什么才能使它工作。jenkins网页上的文档说明,如果新作业或管道与第一个作业或管道位于同一文件夹中,则可以从直接名称或绝对路径调用它。我已经尝试了所有不同的方法,目前我正在尝试一个文件的绝对路径,我刚刚检查过它一秒钟前存在,但它说它不存在。

  • 在Jenkins管道中,我使用构建步骤触发其他几个作业,并向其传递一些参数。除了管道之外,我在可视化我触发的不同工作时遇到了问题。我已经设置了Jenkins Delivery Pipeline插件,但是它的文档非常模糊,我只能可视化管道中的步骤,尽管用阶段和任务名称标记作业。 例子: 我在Jenkins中有两个作业作为管道/工作流作业,具有以下管道脚本: 工作坊: 作业栏: 我如何使它也显示在工作