2015-02-06 193 views
6

我最近開始使用Gulp.js將我所有的CSS和JavaScript打包爲單個文件,然後將其包含在我的Web應用程序中。我的網絡應用程序是用Python編寫的(使用Flask)。自定義部署到Azure網站

我顯然不想跟蹤使用git的gulp輸出CSS和JS文件(因爲它們是構建輸出文件)。

我使用推送部署將我的網站部署到Azure網站。也就是說,我只需運行git push azure master,Azure會自動計算出我正在使用Python,設置virtualenv,安裝pip依賴關係等。 This article describes how to set this up

這個過程很好用,但是現在我已經開始使用Gulp了,我希望確保在部署網站時在服務器端也生成連接的JavaScript和CSS文件。此外,未來,我希望Azure能夠在部署時運行所有測試,並且只有在它們全部通過後才能成功部署。

不幸的是,我還沒有找到一個令人滿意的解決方案,因爲我無法將自定義步驟添加到Azure的自動部署過程中。

我已經嘗試使用Kudu(如this blog post建議)編寫自定義部署腳本,但這樣做會禁用Azure通常執行的所有自動步驟;運行azure site deploymentscript --python僅產生不處理閱讀在web.config文件,建立virtualenv或安裝依賴一個很基本的庫杜部署文件。我沒有發現有關如何自己做這件事的文檔。我使用默認的自動Azure部署腳本(在我推送代碼時生成服務器端,因此我無法自己訪問它),因爲否則像virtualenv和pip依賴項這樣的內容不會被處理。

是否有任何解決方法可用,以便我可以自定義部署腳本(例如運行Gulp),同時仍正確部署Flask?

回答

7

由於Kudu是開源的,在GitHub上可用,我在它的問題跟蹤器(link, for anyone interested)中提出了這個問題。代碼擁有者非常有幫助,並指出我正在尋求解決方案。

  1. 訪問該網站的Kudu服務:yourwebsite.scm.azurewebsites.net
  2. 單擊工具>下載部署腳本,獲取Azure爲您的代碼生成的部署腳本(這不限於Flask應用程序)。
  3. (可選)該腳本是Windows批處理腳本。我將它移植到Bash,因爲我對它更加熟悉,Azure網站也支持它。
  4. 添加自定義的東西根據自己的喜好:使用咕嘟咕嘟/咕嚕建立的東西,運行測試和故障部署(非零錯誤代碼退出)如果任何故障,等等。你應該還記得先檢查一樣咕嘟咕嘟/咕嚕的東西是否是使用npm和適當的package.json文件進行安裝。
    • 請注意,您應該只在KuduSync有機會從存儲庫中複製新文件之前將部署標記爲失敗,否則它們將最終存在於您的web根文件夾中,你的測試失敗了。

這裏是我的代碼處理Gulp.js片段,任何人誰是有興趣的。看看由azure site deploymentscript --node關於如何選擇正確的節點和NPM版本的例子生成的腳本:

selectNodeVersion 
echo "Invoking \"$NPM_CMD install\"..." 
eval $NPM_CMD install 
exitWithMessageOnError "Could not run 'npm install'. Do you have the necessary privileges?" 
echo "Finished npm install." 

# The path doesn't seem to get set OK. Use this hack to run gulp. 
GULP="node_modules/gulp/bin/gulp.js" 

echo "Running gulp..." 
"$GULP" production 
exitWithMessageOnError "Could not run 'gulp'. Did 'npm install' run OK?" 
echo "Finished gulp." 

不要忘了其實是package.json文件包含所有必要咕嘟咕嘟相關性添加到您的項目。 Azure提供Node.js(和npm),但不提供Gulp.js.希望這可以幫助!

P.S .:請注意,整個過程有點怪異,完全正確的方法是使用持續集成代理。