我建立了一个相当简单的分支策略:
在Development批准了拉取请求后,我想触发Jenkins将分支内容部署到NAS共享,并在必要时覆盖。除了NAS位置不同之外,生产版本相同。
我的问题是,从以下选项中,实现此目的的最佳方法是什么?
git pull
。git pull
的服务用户远程访问共享。也许像\\servername\sharename\repo
这样的东西?此外,我已将NAS共享直接呈现给Jenkins运行所在的VM。这是绝对必要的还是有更好的选择?我还应该提到,这些只是脚本,配置文件和其他平面文件……无需编译。分支的总大小可能在100MB到200MB之间(以防万一这太大了,并且通过使用“ git pull”路由会导致性能问题)。
我正在进入持续交付的世界,所以请提前原谅我的无知。
更新:通过使用Publish Over SSH
插件,我可以使某些东西正常工作。但是,现在我试图找出使用此插件的最佳方法。是否可以使用此插件设置管道?目前,我有一个通用的 Freestyle项目,但需要在批准对Development
的请求后才能将我的Development NAS
分支部署到我的Development
。 ..并且在批准对Production
的拉取请求后,需要能够将我的Production NAS
分支部署到我的Production
。
有人这样做吗?如果是,您使用Pipeline
,Multibranch Pipeline
还是Other
?
其他更新:我能够弄清大部分内容。我使用类似于以下内容的自定义Jenkinsfile创建了多分支管道:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Building project"'
}
}
stage('Test') {
steps {
sh 'echo "We can eventually build some unit tests here."'
}
}
stage('Deliver for development') {
when {
branch 'development'
}
steps {
sh 'echo "Run Publish over SSH Plugin to push to development NAS."'
sshPublisher(
failOnError: true,
publishers: [
sshPublisherDesc(
configName: 'nas_dev',
transfers: [
sshTransfer(
sourceFiles: '**/*'
)
]
)
]
)
}
}
stage('Deploy for production') {
when {
branch 'production'
}
steps {
sh 'echo "Run Publish over SSH Plugin to push to production NAS."'
sshPublisher(
failOnError: true,
publishers: [
sshPublisherDesc(
configName: 'nas_prd',
transfers: [
sshTransfer(
sourceFiles: '**/*'
)
]
)
]
)
}
}
}
}
我现在面临的问题是实际上将工作空间镜像到目标NAS位置。例如,如果我从git存储库中删除文件,Jenkins将触发,创建一个工作区,然后通过“通过SSH发布”复制到NAS,被删除的文件仍位于目标NAS位置。我希望它的工作方式与RSYNC相似,但我发现情况并非如此。
有人知道如何做到这一点吗?另外,目标NAS位置中有一个永久目录,我无法删除。