使用Jenkins2管道通过FTP上传

时间:2016-12-15 22:02:25

标签: jenkins ftp jenkins-pipeline

我使用新的Jenkins2管道来构建一个包含以下内容的组合项目:

  • 节点前端
  • php backend

两者都在不同的存储库中,因此需要使用管道来同步它们,编译并准备它们进行部署。我找不到使用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
    }
}

更新2016-12-16

澄清我需要的是一种运行类似于"通过FTP发布的方式"比较旧版本的詹金斯。

5 个答案:

答案 0 :(得分:10)

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]
    ]
}

答案 1 :(得分:3)

在计算机上安装ncftp并在Jenkins中运行此命令:

ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*

(摘自超级用户Can I upload an entire folder using FTP?

答案 2 :(得分:2)

所以你的问题是如何使用Linux命令行通过ftp上传文件? 我认为这是already solved here

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret

答案 3 :(得分:2)

由于这是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]]
  }

这里的魔力是

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

在发布者块中,这些设置与旧版Jenkins配置在传输下定义的设置匹配,因此请参阅该详细信息。

我希望这对将来在管道中使用ftpPublisher插件的人们有所帮助。

答案 4 :(得分:0)

我无法让Jenkins Publish Over FTP插件工作,所以我决定使用有效的shell脚本。以下是使用lftp的代码段。如果您没有安装,请安装它或使用vanilla ftp。

stage('FTP') {
    steps {
        sh '''if git describe --exact-match --tags HEAD; then
            lftp ftp://USER:PWD@FTP -e "cd PATH; mput *.exe; bye"
        else
            exit 0
        fi
        '''
    }
}

如果git中有标签,这只会向FTP发送内容。