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

Jenkins pipeline和Gradle项目,我如何获得GAV属性来用Jenkins Nexus插件部署工件?

百里秋月
2023-03-14

我最近从Maven转到了Gradle。到目前为止,我的Jenkins声明性管道包括一个阶段,在这个阶段我们生成了打包的工件并将其发布到Nexus:

  pipeline {
    ...
    stages {
      stage ('Build Stage') {
        steps {
          ...
          sh "mvn clean deploy"
          ...
        }
      }

通过这种方式,我们使用构建工具(Maven)使用它的一个插件(Maven deploy plugin)来部署工件。使用Nexus Jenkins插件,我们可以解耦这些功能,这对我来说是有意义的:Gradle负责构建、测试和打包工件,而Jenkins Nexus插件将把它上传到Nexus。

重点是,遵循Jenkins Nexus插件文档,我必须使用如下步骤:

nexusPublisher nexusInstanceId: 'localNexus', nexusRepositoryId: 'releases', packages: [[$class: 'MavenPackage', mavenAssetList: [[classifier: '', extension: '', filePath: 'buildmavenCoordinate: [artifactId: 'myproject'/lib/myproject-1.0.0.jar']], , groupId: 'com.codependent.myproject', packaging: 'jar', version: '1.0.0']]]

由于我想产生一个可重用的管道,所以我不想在步骤中硬编码以下属性:

  1. GroupID
  2. ArtifactID
  3. 打包
  4. 版本
def pom = readMavenPom file: 'pom.xml'
...
nexusPublisher ... mavenCoordinate: [artifactId: pom.artifactId
...
apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.8

group = 'com.codependent.myproject'
version = '1.0.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    systemProperties 'property': 'value'
}  
...

共有1个答案

芮安顺
2023-03-14

您正在管道中使用Groovy吗?Gradle不提供解析POM文件本机支持。我建议您在Groovy中使用XmlSlurper。

如果您的管道在Groovy中,您可以使用以下代码使用Gradle读取这些属性:

def pom = new XmlSlurper().parse(new File('pom.xml'))
def version = pom.version
def artifactId = pom.artifactId
def groupId = pom.groupId

如果需要,可以直接打印变量来检查这些值:

println 'my pom version ' + pom.version
println 'my pom version ' + pom.artifactId
println 'my pom version ' + pom.groupId
 类似资料:
  • 我正在做一个使用Maven 3.0.4的项目。 一个示例项目结构 我们使用artifactory作为存储库管理工具,使用Jenkins作为CI构建服务器。artifactory/Jenkins插件也已安装。 如果我在Jenkins中将一个项目设置为Maven 2/3人力资源模型项目,并添加一个构建后步骤以部署到artifactory,那么一个jar工件就会部署到artifactory。 对模型项目

  • Java服务端的Web组件(JavaEE)提供动态扩展能力允许你在web容器或者应用服务器中运行你的程序,就像Servlet这个名字的意思,接收客户端的请求返回响应,在MVC架构中充当控制器的角色,Servlet的响应通过视图组件--JSP来渲染,下图展示了一个典型的MVC架构的Java应用。 WAR(web application archive)用来捆绑Web组件、编译生成的class文件以及

  • 我尝试使用jenkins管道将gradle工件上传到maven存储库。我关注了詹金斯的管道工作 如参考文件所述,应将构建工件部署到工件库。然而,在我的案例中没有部署构建工件。 我已经检查了并发现它是空的。 根据一些提示,我将以下代码放入我的: 然而,前面的没有帮助,仍然没有部署工件。 问题出在哪里?我错过了什么? 感谢您的任何意见。 编辑 我忘了为gradle deployer添加服务器设置。通过

  • 我有一个多项目的gradle构建,其中一个子项目是应用Artifactory插件(版本4.2.0),并配置contextUrl和resolve repoKey。 它设置一个简单的配置和依赖项,然后有一个复制任务来检索依赖项作为zip文件并将其解压缩到目录中。 然而,当复制任务运行时,我得到下面的错误。我做错了什么?这是Artifactory插件或gradle的问题,还是。。。? 问题似乎与该项目是

  • 在运行时是否可以获得my war的maven deploy插件在运行时生成的完整工件版本/内部版本号? 如果maven进程生成并打包了一个包含值的属性文件,就可以了。 请记住,我的项目为每个部署生成唯一的(有时间戳的)工件版本。

  • 我已经用Gradle创建了一个JavaFX应用程序,并希望将它及其所有依赖项和JRE导出到exe中,最好的方法是什么? 我尝试使用Gradle-launch4j提供的快速启动,但exe没有启动,而是在IDE中启动,当我从命令行运行时,我得到错误