2014-11-06 97 views
1

我在繁重的一個項目,可以使用scp到不同的服務器和複製的東西與grunt scp但每次當我有給scp要麼測試或生產,我有在gruntfile.js更改主機名,然後提交回svn,以便通過jenkins.So運行它,我想要的是創造的基礎上,一些環境varible其中的我,我可以在詹金斯添加一些參數,當我選擇任何的參數,例如test通過構建將得到部署,測試等。我的SCP代碼如下設置咕嚕我選擇詹金斯

scp: { 
     options: { 
     host: 'testserver', 
     username: 'user', 
     privateKey: fs.readFileSync('/repository/server/.ssh/id_rsa_robot'), 
     tryKeyboard: true 
     }, 
     dist: { 
     files: [{ 
      cwd: './dist', 
      src: '**/*', 
      filter: 'isFile', 
      // path on the server 
      dest: '/path/to/deploy/project.test' 
     }] 
     } 
    } 

我想使用類似

grunt deploy:test 

grunt deploy:production 

,並要求jenkins做SCP

請幫助!

回答

1

從未使用過步兵,但是您在詹金斯下配置任何參數「此版本是參數化」部分可作爲該構建下的各項進程的環境變量(同爲配置的名稱相同)

根據這個答案,Read environment variables in Node.js,讀取的的NodeJS環境變量(我的理解是蠻兵使用的NodeJS),所有你需要的是:
process.env.ENV_VARIABLE
哪裏ENV_VARIABLE是環境變量的名稱,在詹金斯配置。

所以,你的情況:

  • 勾「這個版本是參數」,在詹金斯的工作配置。
  • 添加「選擇」參數的類型。
  • 給它一個名稱,如Hostname
  • 提供可能值的列表
  • 在文件中,使用:
    host: process.env.Hostname,
1

其他選項是創建從您收集環境JSON文件變量

一個名爲「ENV」文件夾下,您可以爲每個環境,例如一個文件: ENV /發展。JSON

{ 
"host" : "testserver", 
"username" : "user", 
"password" : "*****" 
} 

然後,在您的註冊任務,裝載環境文件,如下圖:

grunt.registerTask('deploy', function(env) { 
    grunt.config.set('env', grunt.file.readJSON('env/'+env+'.json')); 
    ... 
    grunt.task.run(['scp:dist']); 
}); 

現在,使用這些變量來配置的任何任務,像這樣

scp: { 
    options: { 
    host: '<%= secret.host %>', 
    username: '<%= secret.username %>', 
    privateKey: fs.readFileSync('/repository/server/.ssh/id_rsa_robot'), 
    tryKeyboard: true 
    }, 
    dist: { 
    files: [{ 
     cwd: './dist', 
     src: '**/*', 
     filter: 'isFile', 
     // path on the server 
     dest: '/path/to/deploy/project.test' 
    }] 
    } 
} 

最後,以環境爲參數呼叫咕嚕任務

grunt deploy:development 
+0

更正: grunt.config.set('secret',grunt.file.readJSON('env /'+ env +'。json')); – Monkviper 2015-08-08 01:55:22