【问题标题】:Get property value from xml file in Jenkinsfile从 Jenkinsfile 中的 xml 文件获取属性值
【发布时间】:2017-07-06 14:37:31
【问题描述】:

我有一个 Jenkinsfile,我需要我的 .csproj 文件(dotnet 核心项目)中的一个属性

我试过这个:

def versionPrefix = sh(script: 'cat ./src/project.csproj | grep (?<=<VersionPrefix>).*(?=</VersionPrefix>)')

我知道我可能还很遥远,所以我不一定要寻找接近这个的东西,但我正在寻找不需要插件的解决方案(最好)。

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    无管道解决方案

    首先安装Environment Script Plugin

    然后配置如下图

    Enviroment Script Plugin

    在图像中我从 build.xml 文件中获取版本,egrep 中的“-o”参数(也适用于 grep)是只返回我想要的部分而不是整行,其余的是纯正则表达式将数字版本与 . (点),类似

    1.3.13

    管道解决方案

    只需根据需要调整图像中的 grep

    def versionPrefix =  sh(script: 'grep -o (?<=<VersionPrefix>).*(?=</VersionPrefix>) ./src/project.csproj')
    

    【讨论】:

    • 请注意这个命令会返回 null,它应该是:def version = sh(returnStdout: true, script: '.....')
    【解决方案2】:

    我知道这个问题已经得到解答,但是如果其他人需要这种行为并且grep -o 不起作用,那么以下命令可以起作用:

    def versionPrefix = sh([returnStdout: true, script: 'sed -n "s/.*<VersionPrefix>\\([^<]*\\)<\\/VersionPrefix>.*/\\1/p" ./src/project.csproj'])
    

    这是因为 - 至少有一些 - grep 变体不支持前瞻/后瞻。

    【讨论】:

      【解决方案3】:

      查看名为 "XmlSlurper" 的 Groovy 库,它可能对您有帮助。

      在 Jenkins 管道中是不允许的,但 that issue 前段时间已解决!有人试图做类似的事情here

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2020-08-18
        • 2023-01-10
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        相关资源
        最近更新 更多