我使用新的Jenkins2管道来构建一个包含以下内容的组合项目:
两者都在不同的存储库中,因此需要使用管道来同步它们,编译并准备它们进行部署。我找不到使用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发布的方式"比较旧版本的詹金斯。
答案 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/*
答案 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配置在传输下定义的设置匹配,因此请参阅该详细信息。
我希望这对将来在管道中使用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发送内容。