【问题标题】:Jenkins Publish Over SSH Plugin filename variableJenkins Publish Over SSH Plugin 文件名变量
【发布时间】:2017-03-15 17:55:47
【问题描述】:

我有一个 Jenkins 作业,它调用 gradle 脚本从源创建 .war 文件。

gradle war 命令生成一个名为 Geo-1.0.5.war 的文件,因为 build.gradle 使用版本号:

war {
    baseName = 'Geo'
    version = '1.0.5'
}

此文件将使用“Publish Over SSH Plugin”通过 SSH 复制并部署在 Wildfly 服务器上。

如何告诉插件 war 文件名格式类似于 Geo-$gradle_version.war?

【问题讨论】:

    标签: jenkins jenkins-plugins build.gradle


    【解决方案1】:

    如果您单击 Jenkins 中“源文件”字段旁边的 (?) 帮助图标,则会记录这一点:

    该字符串是一个逗号分隔的包含 Ant 文件集的列表,例如。 **/*.jar
    (参见 Ant 手册中的Patterns)。

    因此,在您的情况下,您可以使用 **/Geo-*.war 作为源模式。

    这也显示在 plugin wiki page 的屏幕截图中,以及链接的“Publish Over...”文档的 Source FilesExamples 部分中。


    在您对此答案的评论中,您提到您不想传达文件名是“类似于 Geo-$gradle_version.war 的东西”用于上传,而是想在正在执行的脚本中使用确切的文件名在 SSH 主机上。

    您可以通过添加确定文件名的执行 Shell 步骤并使用 EnvInject Plugin 将其导出为环境变量来实现此目的。例如:

    f=$(basename `find . -name 'Geo-*.war'`)
    echo WAR_FILENAME=${f} > env.properties
    

    然后,通过使用路径设置为env.properties 的注入环境变量步骤,WAR_FILENAME 值将被添加到构建环境中,可供后续步骤使用。

    在 SSH 发布步骤的执行命令字段中,您可以使用 ${WAR_FILENAME} 来引用上传的确切文件名。

    【讨论】:

    • 感谢您的回复。通配符可能是一种解决方法,但我正在寻找一种将确切的战争名称传递给 SSH 复制后执行的脚本的方法。
    • 你应该在你的问题中清楚地提到这一点。我已添加到我的答案中。
    • @ChristopherOrr 如果 Source files 路径在另一个工作区中,我该如何指定呢?文档说它与工作的工作空间相关,但我的工件是由不同的工作产生的。我有一个悬而未决的问题 - stackoverflow.com/questions/49615692/…
    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多