使用Jenkins2管道通过FTP上传

gen*_*afa 11 ftp jenkins jenkins-pipeline

我正在使用新的Jenkins2管道来构建一个组合项目:

  • 节点前端
  • php后端

两者都在不同的存储库中,因此需要使用管道来同步它们,编译并准备它们进行部署.我找不到使用FTP部署的简单方法.

我的脚本看起来像这样:

node {
    // uncomment these 2 lines and edit the name 'node-4.4.5' according to what you choose in configuration
    def nodeHome = tool name: 'NodeJS 7.2.1', type: 'jenkins.plugins.nodejs.tools.NodeJSInstallation'
    env.PATH = "${nodeHome}/bin:${env.PATH}"

    stage("front") {
        dir('front') { // switch to subdir
            git url: ...             
            sh "npm install"

            sh "npm run build --prod"

            sh "cp -R * ../dist"
        }
    }

    stage("back") {
        dir('back') {
            git url: ...

            sh 'curl -sS https://getcomposer.org/installer | php'
            sh 'php composer.phar install'

            sh "cp -R * ../dist"
        }
    }
    stage("upload via ftp") {
        // IM NOT SURE WHAT TO DO HERE
    }
}
Run Code Online (Sandbox Code Playgroud)

更新2016-12-16

澄清我需要的是一种运行类似于"通过FTP发布"的方法,如旧版本的Jenkins.

fra*_*mes 12

Jenkins Publish Over FTP插件从版本1.15开始支持Pipeline.

我的Jenkins文件中的一个片段,它将一些文件发送到我们的服务器:

stage('Upload')
{
    ftpPublisher alwaysPublishFromMaster: true, continueOnError: false, failOnError: false, publishers: [
        [configName: 'YOUR_CONFIG_HERE', transfers: [
            [asciiMode: false, cleanRemote: false, excludes: '', flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "YOUR_DIRECTORY_HERE", remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**.exe, **.txt']
        ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true]
    ]
}
Run Code Online (Sandbox Code Playgroud)

  • 我得到:`WorkflowScript: 16: Missing required parameter: "paramPublish"`... 这个参数的文档没有任何意义:参数或环境变量的名称将包含匹配标签的表达式。什么牌子?... (2认同)
  • @Sardathrion 尝试将其与一级参数一起包含在内:`paramPublish: [parameterName:""]` (2认同)

Mar*_*kel 5

由于这是 google 上的顶级链接之一,而其他答案不起作用,我将继续添加我的两分钱。

这是我正在使用的工作管道阶段:

stage ('Deploy') {
  steps {
    ftpPublisher alwaysPublishFromMaster: true,
                 continueOnError: false,
                 failOnError: false,
                 masterNodeName: '',
                 paramPublish: null,
                 publishers: [[configName: 'External Host', transfers: [[asciiMode: false, cleanRemote: true, excludes: '', flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'public', sourceFiles: 'public/*,public/**/*']], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false]]
  }
Run Code Online (Sandbox Code Playgroud)

这里的魔法是

  • 在 Jenkins 主配置页面的 Publish Over FTP 下设置外部主机,并确保名称匹配。
  • 分别使用空字符串和 null 添加新的必需参数 masterNodeName 和 paramPublish。

在publishers 块中,这些设置与transfers 下旧样式Jenkins 配置中定义的内容相匹配,因此请参阅该设置以了解详细信息。

我希望这可以帮助未来在管道中使用 ftpPublisher 插件的人。

  • 这是正确的,不同之处在于我添加了两个新的必需参数 masterNodeName 和 paramPublish 以及有效值。 (2认同)