2016-01-19 16 views
10

Khi nâng cấp một ứng dụng, lệnh Test-ServiceFabricApplicationPackage sẽ ném lỗi cho mọi gói mã có số phiên bản không thay đổi (nội dung đã thay đổi, mặc dù mã không có). Tôi biết có một tính năng cho phép tạo một phần gói, nhưng tôi không thể sử dụng nó. Câu hỏi của tôi là:Bao bì khác biệt

  1. Nội dung của gói mã được kiểm tra thay đổi như thế nào? So sánh nhị phân?
  2. Làm thế nào để xây dựng các gói phần (Chỉ cần loại bỏ các thư mục Mã sau khi VS xây dựng các gói? Chỉnh sửa các tập tin ServiceManifest.xml?)
  3. Làm thế nào để chạy Test-ServiceFabricApplicationPackage (URL lưu trữ hình ảnh? Làm thế nào để vượt qua tham số đó để việc triển khai tiêu chuẩn là gì script?)

Tôi đánh giá cao ví dụ điển hình.

Trả lời

10

Nếu bạn muốn làm nâng cấp một phần, đây là cách tôi đã thực hiện nó:

Với

app1 1.0.0 
    service1 1.0.0 
    code 1.0.0 
    config 1.0.0 
    service2 1.0.0 
    code 1.0.0 
    config 1.0.0 

Và bạn muốn cập nhật chỉ Dịch vụ 1 tới phiên bản 1.0.1 như hình dưới đây:

app1 1.0.1 
    service1 1.0.1 
    code 1.0.1 
    config 1.0.1 
    service2 1.0.0 
    code 1.0.0 
    config 1.0.0 

Trong Service1, hãy cập nhật ServiceManifest.xml để có số phiên bản chính xác (bản thân dịch vụ và các gói khác nhau bạn muốn nâng cấp). Sau đó, trong thư mục service2 của bạn, hãy xóa mọi thứ ngoại trừ ServiceManifest.xml.

Trong tệp ApplicationManifest.xml, bạn nên giữ ServiceManifestImport cho Service2 ở phiên bản 1.0.0. Cũng cập nhật versionnumber cho ServiceManifestImport cho Service1.

Sau đó được thực hiện, bạn sẽ có thể để làm một:

Test-ServiceFabricApplicationPackage $packagePath -ImageStoreConnectionString $ImageStoreConnectionString 

để xác nhận rằng gói hoạt động. Điều này làm (theo như tôi hiểu) là nó sử dụng gói địa phương cùng với gói hiện đang được triển khai, và hai kết hợp đó sau đó sẽ bằng một gói hoàn chỉnh hợp lệ.

Vì vậy, về cơ bản, điều duy nhất thay đổi là:

  • Bạn loại bỏ những điều bạn không muốn trong gói của bạn (nhưng bạn giữ các ServiceManifest.xml)
  • Bạn cập nhật phiên bản các số trong các dịch vụ đã thay đổi
  • Bạn cập nhật số phiên bản trong tệp kê khai ứng dụng cho cả ứng dụng và các dịch vụ đã thay đổi.

Ngoài ra, hãy xem tài liệu này: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-application-upgrade-advanced/#upgrade-with-a-diff-package

Về nhận được các cửa hàng ảnh để sử dụng cho Test-ServiceFabricApplicationPackage cuộc gọi (bạn có thể tìm thấy tất cả bằng cách nhìn vào mặc định triển khai kịch bản, nhưng đây là những gì bạn cần):

Open powershell 
Connect to your cluster (Connect-ServiceFabricCluster ...) 
Execute the following commands: 

$ClusterManifestRaw = Get-ServiceFabricClusterManifest 
$ClusterManifestXml = [xml]$ClusterManifestRaw 
$ManagementSection = $ClusterManifestXml.ClusterManifest.FabricSettings.Section | ? { $_.Name -eq "Management" } 
$ImageStoreConnectionString = $ManagementSection .ChildNodes | ? { $_.Name -eq "ImageStoreConnectionString" } | Select-Object -Expand Value 
+0

là nó vẫn là trường hợp đó là thích hợp hơn để làm những nâng cấp từ PowerShell hơn là trực tiếp từ vs? –

+0

Công cụ VS cho triển khai cục bộ tốt hơn rất nhiều so với cách đây một năm, nhưng chúng tôi vẫn sử dụng PS để triển khai, ngay cả cục bộ. Đó là sở thích của chúng tôi ít nhất. Tôi đoán tất cả phụ thuộc vào nếu nó làm những gì bạn cần và những gì bạn cảm thấy thoải mái. – anderso

+0

Tôi có thể xem nhanh các tập lệnh của bạn không? –

6

Dịch vụ Vải hỗ trợ các gói khác biệt nhưng nâng cấp với các gói khác biệt chưa được tích hợp hoàn toàn với Visual Studio. Nhưng bạn có thể làm điều đó bằng tay.

  1. Có so sánh nhị phân.
  2. Vì vậy, trong một gói khác biệt, bạn chỉ tăng các phiên bản cho các gói (mã, cấu hình và dữ liệu) đã thay đổi. Nếu các tập tin nhị phân đã thay đổi cho một gói có phiên bản không thay đổi - có thể chỉ từ một biên dịch lại - thì bạn có thể đơn giản bỏ qua các tệp của nó từ gói ứng dụng cuối cùng.
  3. Cửa hàng hình ảnh có thể là một vị trí bên ngoài (như lưu trữ blob Azure) nhưng tùy chọn đơn giản nhất là dịch vụ lưu trữ hình ảnh tích hợp, được sử dụng theo mặc định trong SDK và Azure. Để sử dụng, bạn chỉ cần sử dụng "vải: ImageStore" cho chuỗi cửa hàng ảnh: vải Test-ServiceFabricApplicationPackage -ApplicationPackagePath/path/to/gói -ImageStoreConnectionString: ImageStore

Dưới đây là một ví dụ về một gói khác. Hãy tưởng tượng bạn có những điều sau đây:

app1 1.0.0 
    service1 1.0.0 
    code 1.0.0 
    config 1.0.0 
    service2 1.0.0 
    code 1.0.0 
    config 1.0.0 

Và bạn muốn nâng cấp chỉ gói mã của service1:

app1 2.0.0   <-- new version 
    service1 2.0.0  <-- new version 
    code 2.0.0  <-- new version 
    config 1.0.0 
    service2 1.0.0 
    code 1.0.0 
    config 1.0.0 

Bạn cập nhật các phiên bản trong ứng dụng và dịch vụ của bạn biểu hiện, nhưng bạn chỉ bao gồm các gói đã thay đổi trong gói ứng dụng cuối cùng. Gói ứng dụng của bạn sẽ trông giống như sau:

app1/ 
    service1/ 
    code/ 

Các gói có số phiên bản không thay đổi không được bao gồm. Lưu ý rằng bạn có thể bao gồm các gói đó, nhưng chỉ khi chúng giống hệt nhau (nhị phân khác nhau) với các gói của cùng một phiên bản hiện được đăng ký cho ứng dụng trong cụm, trong trường hợp đó chúng sẽ đơn giản bị bỏ qua.

Cách nhanh chóng và dễ dàng để tạo một trong số này là sử dụng lệnh Gói trong Visual Studio (nhấp chuột phải vào ứng dụng và chọn Gói). Sau đó đi đến thư mục đầu ra và chỉ cần xóa các thư mục cho các gói có phiên bản không thay đổi.

+0

"chỉ cần xóa" - từ hệ thống tệp? biểu hiện? cả hai? –

+0

Khi gói mã bị xóa khỏi cả hai hệ thống tệp và tệp kê khai, có lỗi: 'Test-ServiceFabricApplicationPackage: Ngoại lệ khi phân tích cú pháp tệp XML: ... ServiceManifest.xml' –

+0

Khi xóa toàn bộ dịch vụ (xóa thư mục và xóa nó từ tệp ApplicationManifest.xml), có lỗi: 'Test-ServiceFabricApplicationPackage: Dịch vụ không tồn tại.' –

Các vấn đề liên quan