using Jenkins2 pipeline to upload via FTP

2019-03-27 12:25发布

I'm using the new Jenkins2 pipeline to build a composed project with:

  • node frontend
  • php backend

both are in different repositories hence, the need to use pipeline to sync them, compile, and prepare them to deploy. I cannot find a simple way to deploy using FTP.

My script looks something like this:

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

UPDATE 2016-12-16

To clarify what I need is a way to run something similar to "Publish via FTP" like older versions of Jenkins.

4条回答
放我归山
2楼-- · 2019-03-27 12:27

So your question is how to use Linux command line to upload a file via ftp? I think it was already solved here

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
查看更多
可以哭但决不认输i
3楼-- · 2019-03-27 12:30

The Jenkins Publish Over FTP plugin has Pipeline support as of version 1.15.

A snippet from my Jenkinsfile that sends some files to our server:

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]
            ]
        }
查看更多
你好瞎i
4楼-- · 2019-03-27 12:40

I could not get get the Jenkins Publish Over FTP plugin to work at all so I decided to use shell scripts which work. Below is a snippet using lftp. If you do not have that installed, either install it or use 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
        '''
    }
}

This will only send things to FTP if there is a tag in git.

查看更多
啃猪蹄的小仙女
5楼-- · 2019-03-27 12:50

Install ncftp on the computer and run this command in Jenkins:

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

(Taken from Can I upload an entire folder using FTP? on Super User)

查看更多
登录 后发表回答