如何重用以前的pipieline阶段的构建源

时间:2017-05-31 12:42:01

标签: jenkins jenkins-pipeline

我正在尝试为依赖于nodeJS模块的Web应用程序项目获取管道设置,因此需要将这些安装作为构建阶段的一部分

  1. 指定代理人 - 'master'
  2. 运行'Build'阶段:
    • 安装依赖项(npm install) - npm模块进入工作区目录根目录下的node_modules文件夹
    • 藏匿一些文件
    • 更改节点 - 在此处我卸载到另一台计算机上的某个目录路径
  3. 运行'单元测试'阶段
    • 将节点更改回主人
    • 发出shell命令以运行单元测试 - 这依赖于作为第一阶段的一部分安装的节点模块
  4. 我遇到的问题是,在运行我的第二个“单元测试”阶段时,shell命令用于运行Gulp任务,gulp在第一阶段作为节点模块安装。但是,当切换回我的主节点时,在前一阶段(卸载文件时)处于不同节点上时,会创建一个新工作区(命名与第一阶段中的原始工作区相同,但后缀为'@ 2'),因此节点模块不可用。我不想再次安装这些,所以我想从第一阶段重新使用相同的工作区目录。

    我尝试了什么:

    1. 在第一阶段使用自定义变量存储最初创建的工作空间的路径,并在ws指令的第二阶段使用
    2. -

      pipeline {
        agent { label 'master' }
        stages {
          stage('Build') {
            steps {
                      script {
                          def workspace = pwd()
                      }
              sh '''
                npm install
                bower install
                gulp set-staging-node-env
                gulp prepare-staging-files
                gulp webpack
              '''
              stash includes: 'dist/**/*', name: 'builtSources'
              stash includes: 'config/**/*', name: 'appConfig'
              node('Protractor') {
                dir('/opt/foo/deploy/') {
                  unstash 'builtSources'
                  unstash 'appConfig'
                }
              }        
            }
          }
          stage('Unit Tests') {
            steps {
              parallel (
                "Jasmine": {
                  node('master') {
                                  echo "${workspace}"
                    ws("${workspace}"){
                      sh 'gulp karma-tests-ci'
                    }
                  }
                },
                "Mocha": {
                  node('master') {
                    ws("${workspace}"){
                      sh 'gulp mocha-tests'
                    }
                  }
                }
              )
            }
          }
          }
      }
      

      这种方法对我来说不起作用,因为当在第二阶段的并行步骤中切换回我的主节点时,它不使用第一阶段的工作空间。同样,在回显我的工作空间路径变量时,我可以看到它更改为@ 2前缀复制。

      2。存储和取消暂存工作区内容。

      pipeline {
        agent { label 'master' }
        stages {
          stage('Build') {
            steps {
              sh '''
                npm install
                bower install
                gulp set-staging-node-env
                gulp prepare-staging-files
                gulp webpack
              '''
              stash includes: 'dist/**/*', name: 'builtSources'
              stash includes: 'config/**/*', name: 'appConfig'
              stash excludes: 'dist/**/*', name: 'originalSources'
              node('Protractor') {
                dir('/opt/interact/deploy/') {
                  unstash 'builtSources'
                  unstash 'appConfig'
                }
              }        
            }
          }
          stage('Unit Tests') {
            steps {
              node('master') {
                unstash 'originalSources'
                sh 'gulp karma-tests-ci'
              }
            }
          }
      }
      

      这种方法意味着我只使用jenkins分配的任何工作空间,但这也意味着我将依赖项复制到另一个工作区,感觉就像它增加了磁盘空间。

      我不是100%确定这里的正确方法是什么,最佳实践是什么,等等。我正在努力寻找合适的指南。任何人都可以分享我在这里可以做些什么的想法吗?

      由于

0 个答案:

没有答案
相关问题