应该使用插件通过Jenkins从Bitbucket部署到NAS吗?

时间:2018-11-13 19:21:28

标签: jenkins jenkins-plugins jenkins-pipeline

我建立了一个相当简单的分支策略:

  • 大师
  • 发展
  • 生产

在Development批准了拉取请求后,我想触发Jenkins将分支内容部署到NAS共享,并在必要时覆盖。除了NAS位置不同之外,生产版本相同。

我的问题是,从以下选项中,实现此目的的最佳方法是什么?

  1. 编写bash脚本以将文件从Jenkins工作区移动到目标位置。
  2. 以某种方式直接从目标位置使用git pull
  3. 通过具有读写功能并从目标执行git pull的服务用户远程访问共享。也许像\\servername\sharename\repo这样的东西?
  4. 以上都不是。

此外,我已将NAS共享直接呈现给Jenkins运行所在的VM。这是绝对必要的还是有更好的选择?我还应该提到,这些只是脚本,配置文件和其他平面文件……无需编译。分支的总大小可能在100MB到200MB之间(以防万一这太大了,并且通过使用“ git pull”路由会导致性能问题)。

我正在进入持续交付的世界,所以请提前原谅我的无知。


更新:通过使用Publish Over SSH插件,我可以使某些东西正常工作。但是,现在我试图找出使用此插件的最佳方法。是否可以使用此插件设置管道?目前,我有一个通用的 Freestyle项目,但需要在批准对Development的请求后才能将我的Development NAS分支部署到我的Development。 ..并且在批准对Production的拉取请求后,需要能够将我的Production NAS分支部署到我的Production

有人这样做吗?如果是,您使用PipelineMultibranch 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位置中有一个永久目录,我无法删除。

0 个答案:

没有答案