2017-03-06 47 views
2

我想使用VSTS CI/CD將角度2應用程序部署到不同的Web應用程序插槽(讓我們說dev,staging和prod)。每個插槽應指向不同的Web API。通常可以在應用程序中指定三個不同的環境文件,但缺點是我必須在不同的環境下構建三次。azure讀取應用程序設置的角度2應用程序

我想實現的是隻有兩個版本,dev和prod。開發人員將部署到開發人員插槽,並將開發人員部署到第一臺,然後將相同的構建部署到生產插槽。我可以爲每個插槽定義應用設置。他們被視爲環境變量。

有沒有辦法從angular 2應用程序中讀取這些配置設置,或者我是否缺少其他東西?

回答

1

我不鼓勵你將相同的構建部署兩三次,因爲你會錯過代碼縮小和捆綁生產服務器。

可以不要設置什麼了建設任務VSTS:所以你可以,例如,運行npm your-build-task --prod當你的代碼推到生產分支,只是當推掌握npm yourbuild-task或開發分支,等。

在你的AppModule(或任何模塊,你有你的服務),您可以設置如下:

providers: [ 
... 
    { 
    provide: API_CONFIG, useFactory: apiConfigFactory 
    } 
... 
] 

... 

export function apiConfigFactory() { 
    if (environment.production) { 
    return MY_PROD_API_CONFIG; 
    } else { 
    return MY_DEV_API_CONFIG; 
    } 
} 

而且這樣一來,你可以設置你的基本URL中的每個配置對象:一個指向產品,一個指向開發,你可以簡單地注入t API_CONFIG獲取正確的基礎API網址。但是,如果你想保持相同的版本,你可以做類似的事情,但是在你的apiFactoryConfig函數中,你需要一些邏輯來區分環境:比如檢查瀏覽器的基地azurewebsites.net URL或類似的東西。

+2

謝謝你的建議。我認爲我可以將問題簡化爲以下幾點:我有3個環境的構建,我需要一些機制來區分它們。 Azure具有每個部署插槽的應用設置,因此我的意圖是閱讀它們。如果這是不可能的,我會回到3部署3部署。你提到的URL方法會失敗,如果我決定將應用程序部署到另一個URL或像這樣。 – user3838018

1

只有後端語言可以在運行時作爲環境變量訪問APP設置。由於Angular 2位於前端,因此我們無法直接從前端讀取這些設置。解決方法是通過後端讀取應用程序設置,然後公開端點,然後通過Angular 2應用程序中的AJAX調用訪問此端點。

您可以查看my earlier post,我發佈了PHP示例代碼來閱讀APP設置。

+1

感謝您的建議,但我不知道如何將應用程序設置暴露給「公共」api。知道該URL的每個人都可以讀取敏感信息(如連接字符串) – user3838018

+0

對於任何想到此問題的人來說,本文中'確定運行時環境'一節中的環境標記助手可能很有用:https://docs.microsoft.com/EN-US/ASPNET /核心/基礎/環境 – TonE

相關問題