Tự động hóa phát triển và quản lý các máy ảo đám mây

Tìm hiểu cách tự động hóa xây dựng và triển khai trên IBM SmartCloud Enterprise với công cụ Apache Maven

Một xu hướng gần đây đã là xây dựng một kết nối mạnh mẽ giữa ứng dụng đám mây và phát triển dịch vụ và các hoạt động; đặc biệt, xu hướng này đang dẫn đến một sự tích hợp các công cụ quản lý vòng đời ứng dụng (ALM) với điện toán đám mây chặt chẽ hơn, hiệu quả hơn. Trong bài này, các tác giả sẽ cho bạn thấy cách sử dụng công cụ quản lý xây dựng Apache Maven nguồn mở để tự động hóa các dự án xây dựng và triển khai trên IBM® SmartCloud Enterprise (Doanh nghiệp Đám mây thông minh của IBM). Họ cũng sẽ giải thích cách tích hợp quản lý máy ảo trên đám mây vào vòng đời xây dựng và triển khai bằng cách phát triển một trình cắm thêm của Apache Maven để tìm kiếm và tạo các máy ảo chạy một máy chủ ứng dụng J2EE trên đám mây. Bạn cũng sẽ tìm hiểu các hướng dẫn thực hành tốt nhất để phát triển và triển khai trên đám mây và cách sử dụng các API của IBM Cloud và Maven để thực hiện các hướng dẫn thực hành này.

Alex Amies, Kỹ sư phần mềm cao cấp, IBM

Alex Amies là kỹ sư phần mềm cao cấp tại phòng thí nghiệm phát triển GTS của IBM tại Trung Quốc. Ông hiện là kiến trúc sư tham gia thiết kế IBM SmartCloud Enterprise. Trước đây, ông đã làm kiến trúc sư và nhà phát triển về các sản phẩm bảo mật và đám mây trong các nhóm khác của IBM.



Pan Xia Zou, Kỹ sư phần mềm, IBM

Pan Xia Zou là Kỹ sư phần mềm nhân viên tại IBM và là kiến trúc sư tự động hóa xây dựng và triển khai về IBM SmartCloud Enterprise.



Yi Shuai Wang, Kiến trúc sư tư vấn, IBM

Yi Shuai Wang là một Kiến trúc sư tư vấn tại IBM và nhà phát triển chính về phát triển các dịch vụ hỗ trợ kinh doanh của IBM SmartCloud.



08 06 2012

Tự động hóa xây dựng và triển khai là rất quan trọng để thực hiện trơn tru bất kỳ dự án phát triển nào. Khi các dự án càng lớn hơn, nó càng quan trọng hơn. Một xu hướng gần đây trong các công cụ quản lý vòng đời ứng dụng (ALM) là việc xây dựng một kết nối tốt hơn giữa phát triển và các hoạt động và đặc biệt, tích hợp các công cụ này với các đám mây.

Một trong những điều tuyệt vời về tài nguyên đám mây so với tài nguyên vật lý là bạn có thể tạo tài nguyên đám mây theo yêu cầu với các API. Các công cụ ALM có thể được chạy trên đám mây, sử dụng đám mây theo một cách nào đó hoặc được sử dụng để phát triển các ứng dụng với đám mây.

IBM Rational® Application Developer (Nhà phát triển ứng dụng Rationalcủa IBM) và các công cụ phát triển tích hợp là lý tưởng để phát triển mã, gồm thực hiện các xây dựng cục bộ và kiểm tra đơn vị, nhưng việc tạo ra một quá trình xây dựng có thể lặp lại được là rất quan trọng để phát triển ứng dụng trong một nhóm làm việc có nhiều hơn một người.

Có một số nhiệm vụ thường có trong vòng đời xây dựng và triển khai, gồm có:

  • biên dịch
  • đóng gói
  • xác nhận hợp lệ
  • kiểm tra đơn vị
  • cấu hình phần mềm trung gian
  • triển khai

Trong điện toán đám mây, bạn có thể đưa việc tự động hóa triển khai tiến một bước xa hơn bằng cách tạo ra các máy ảo với phần mềm cài đặt sẵn.

Có một số các công cụ xây dựng nguồn mở và thương mại có khả năng tự động hóa xây dựng và triển khai, bao gồm Ant, Maven và IBM Build Forge. Trong bài này, chúng tôi tập trung vào công cụ mã nguồn mở Apache Maven; nó có các định nghĩa cho các giai đoạn xây dựng và triển khai mà chúng tôi quan tâm đến và nó bao gồm một khung công tác mở rộng. Ngoài ra, nó chứa các mẫu với một số hướng dẫn thực hành tốt nhất và các trình cắm thêm cho một số các nhiệm vụ xây dựng rất có ích.

Dự án J2EE mẫu

Danh mục IBM SmartCloud Enterprise gồm các cá thể của IBM WebSphere® Application Server 7.0 (Phiên bản 7.0 của Máy chủ dịch vụ WebSpherecủa IBM). Với bản này, bạn có thể sử dụng một môi trường J2EE mà không cần phải cài đặt bất kỳ phần mềm nào và còn được hưởng các tính năng bổ sung do WebSphere Application Server cung cấp trên các môi trường J2EE khác.

Khi yêu cầu một máy chủ của WebSphere Application Server, bạn được nhắc nhập tên người dùng và mật khẩu cho giao diện quản trị của WebSphere Application Server. Lưu ý những điều này vì bạn sẽ cần chúng sau này. Ngoài ra, bạn được nhắc chọn lược tả, như được hiển thị dưới đây.

Hình 1. Màn hình Các tham số bổ sung của trình hướng dẫn cung cấp hình ảnh WebSphere
Màn hình Các tham số bổ sung của trình hướng dẫn cung cấp hình ảnh WebSphere

Một lược tả WebSphere định nghĩa một môi trường thời gian chạy, gồm tất cả các tệp mà máy chủ xử lý để xác định và lưu trữ thông tin cấu hình. Chọn lược tả Development. Nó sẽ giúp cho WebSphere Application Server quản lý thuận tiện hơn thông qua IBM Rational Software Architect (Kiến trúc sư phần mềm Rational của IBM), sẽ được thảo luận sau.

WebSphere Application Server bắt đầu chạy một thời gian ngắn sau khi cá thể này được cung cấp và đã khởi động. Bạn có thể mở giao diện quản trị với URL sau: https://host:9043/ibm/console/logon.jsp.

Tất cả việc quản lý máy chủ ứng dụng WebSphere trừ lúc bắt đầu và tự dừng máy chủ đó có thể được thực hiện từ giao diện quản trị web. Bạn có thể sử dụng IBM Rational Application Developer, Eclipse hoặc một số IDE khác để tạo các ứng dụng J2EE có thể chạy trong WebSphere Application Server. Đối với Eclipse, hãy sử dụng Công cụ tiêu chuẩn J2EE, còn được gọi là phiên bản J2EE Developer Tools (Các công cụ phát triển J2EE). Bạn cũng có thể sử dụng các hình ảnh của IBM Rational Application Developer trong danh mục IBM Cloud (Đám mây của IBM) để tận dụng lợi thế của một môi trường dựng sẵn.

Để thử nó trong Rational Application Developer hay Rational Software Architect, hãy khởi động một ứng dụng doanh nghiệp mới trong Eclipse bằng cách sử dụng trình hướng dẫn EAR Application Project (Dự án ứng dụng EAR):

Hình 2. Trình hướng dẫn Dự án ứng dụng EAR của Eclipse
Trình hướng dẫn Dự án ứng dụng EAR của Eclipse

Gọi dự án CloudAPIClientEAR. Nhấn nút Finish. Tiếp theo, tạo một dự án web động; gọi nó là CloudAPIClientWeb. Thêm dự án web động vào dự án CloudAPIClientEAR:

Hình 3. Trình hướng dẫn Dự án Web động của Eclipse
Trình hướng dẫn Dự án Web động của Eclipse

Bây giờ chúng ta hãy tạo một tệp HTML và một servlet để kiểm tra ứng dụng. Thêm một tệp tên là index.html vào thư mục nội dung web với một vài dòng văn bản như "My web application" (Ứng dụng web của tôi). Ngoài ra, thêm một servlet với mã giống như lớp TestServlet:

Liệt kê 1. Thêm một servlet
package com.ibm.cloud.examples.servlet; 
import java.io.IOException; 
import java.io.Writer; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
/** * Servlet implementation class TestServlet */ 

public class TestServlet extends HttpServlet 
{
    private static final long serialVersionUID = 1L; 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException 
    { Writer writer = response.getWriter(); 
      writer.write("My web application"); 
    } 
}

Nếu bạn sử dụng Rational Software Architect hoặc Eclipse, tệp web.xml lưu trữ của ứng dụng web của bạn đã được cấu hình cho bạn. Nếu không, hãy tạo nó giống như sau:

Liệt kê 2. Tệp web.xml lưu trữ của ứng dụng web của bạn sẽ giống như sau
<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.5" 
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <display-name>CloudAPIClientWeb</display-name> 
   <servlet>
     <display-name>TestServlet</display-name>
     <servlet-name>TestServlet</servlet-name>
     <servlet-class>com.ibm.cloud.examples.servlet.TestServlet</servlet-class>
   </servlet> 
   <servlet-mapping>
     <servlet-name>TestServlet</servlet-name>
     <url-pattern>/TestServlet</url-pattern> 
   </servlet-mapping>
     <welcome-file-list> 
        <welcome-file>index.html</welcome-file>
     </welcome-file-list> 
</web-app>

Tiếp theo, xuất khẩu tệp này. Nhấn chuột phải vào dự án EAR và chọn Export to EAR (Xuất khẩu tới EAR). Tên tệp là CloudAPIClientEAR.ear:

Hình 4. Trình hướng dẫn Xuất khẩu EAR của Rational Software Architect
Trình hướng dẫn Xuất khẩu EAR của Rational Software Architect

Để thêm tệp EAR của ứng dụng doanh nghiệp của bạn:

  1. Chuyển đến giao diện quản trị WebSphere trong trình duyệt của bạn.
  2. Chuyển hướng tới Applications > New Application > New Enterprise Application và chọn Upload from Local file system (Tải lên từ hệ thống tệp cục bộ). Tải lên tệp EAR và nhấn Next.
  3. Chọn tùy chọn Fast Path (Đường dẫn nhanh).
  4. Chọn bất kỳ thư mục nào để cài đặt ứng dụng.
  5. Trong ô cửa sổ Map Modules to Servers (Ánh xạ Các mô đun tới Các máy chủ), chọn CloudAPIClientWeb.
  6. Lưu các thay đổi.
  7. Chuyển đến Applications > Application Types > WebSphere enterprise applications (Các ứng dụng doanh nghiệp WebSphere). Khởi động ứng dụng.

Chuyển hướng đến URL này để xem trang HTML: http://host:9080/CloudAPIClientWeb/. Bạn sẽ thấy dòng văn bản "My web application" mà bạn đã thêm vào trang HTML ở trên. Để xem servlet, nhập URL này: http://host:9080/CloudAPIClientWeb/TestServlet. Bạn sẽ thấy văn bản mà bạn phát ra từ Writer trong mã TestServlet.

Việc triển khai theo cách này có thể trở nên nhàm chán nếu bạn làm điều đó nhiều hơn một vài lần. Bạn có thể tiết kiệm được nhiều thời gian bằng cách sử dụng các khả năng triển khai từ xa trong Eclipse hoặc IBM Rational Application Developer. Nó sẽ tự động xuất bản ứng dụng J2EE của bạn đến máy chủ thay vì yêu cầu bạn nhảy qua tất cả các màn hình trong giao diện quản trị WebSphere. Sử dụng trình hướng dẫn New Server (Máy chủ mới) để thêm máy chủ từ xa, cung cấp địa chỉ IP và tên máy chủ vật lý (host) hoặc tên và mật khẩu người dùng quản trị.

Bây giờ chúng ta hãy xem xét việc thiết lập và sử dụng Apache Maven để tạo điều kiện thuận lợi cho việc tự động hóa xây dựng.


Tự động hóa xây dựng với Maven

Để thiết lập Apache Maven, hãy tải nó từ trang web dự án và xác định các biến môi trường như được hiển thị.

Liệt kê 3. Định nghĩa các biến môi trường của Maven
set M2_HOME=D:\opt\apache-maven-3.0.3 set JAVA_HOME=D:\Program
        Files\IBM\SDP\jdk set PATH=%JAVA_HOME%;%PATH%;%M2_HOME%\bin

Bạn có thể thực hiện các nhiệm vụ tương đương với Linux®. Để kiểm tra xem Maven có sẵn để dùng chưa, hãy thực hiện lệnh sau:

Liệt kê 4. Kiểm tra Maven đã có sẵn chưa
>mvn 
--version Apache Maven 3.0.3 (r1075438; 2011-03-01 01:31:09+0800) 
Maven home: D:\opt\apache-maven-3.0.3 
Java version: 1.6.0, 
vendor: IBM Corporation 
Java home: D:\Program Files\IBM\SDP\jdk\jre Default 
locale: en_US, platform encoding: GB18030 OS 
name: "windows xp", version: "5.1 build 2600 service pack 3", 
arch: "x86", family: "windows"

Bạn sẽ thấy một cái gì đó giống như thông tin xuất hiện sau lệnh trong Liệt kê 4.

Trong Maven, một nguyên mẫu (archetype) là một khuôn mẫu cho một dự án bao gồm một cấu trúc dự án tiêu chuẩn có thể được tạo ra. Đó là điều tốt cần biết; trong ví dụ trước của chúng tôi, bạn đã có dự án riêng của mình được tạo ra trong IDE của bạn và bạn đã đang tạo các ứng dụng web và các ứng dụng doanh nghiệp. Chúng ta hãy xem cách giải quyết vấn đề đó và tìm hiểu một chút về Maven trong quá trình này.

Trong Maven, một dependency (phụ thuộc), giống như một thư viện Java™ được đóng gói trong một JAR, bao gồm ít nhất là một groupId, một artifactId, một phiên bản và một scope (phạm vi). Để xử lý các phụ thuộc này, Maven nhìn vào kho lưu trữ cục bộ của bạn. Nếu phụ thuộc đó không tồn tại trong kho lưu trữ cục bộ của bạn, Maven sẽ tải nó từ một kho lưu trữ bên ngoài vào kho lưu trữ cục bộ của bạn. Kho lưu trữ bên ngoài mặc định là http://repo1.maven.org/maven2/. Bạn cũng có thể thiết lập kho lưu trữ từ xa riêng của mình và đám mây sẽ là một chỗ tốt để làm điều đó.

Giả sử bạn có một phụ thuộc vào một tệp JAR của bên thứ ba. Bạn có thể thêm phụ thuộc đó vào tệp pom.xml của bạn bằng một đoạn mã sau:

Liệt kê 5. Thêm một sự phụ thuộc vào một tệp JAR của bên thứ ba
<dependency> 
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId> 
   <version>1.2.12</version>
   <scope>compile</scope> 
</dependency>

Ví dụ này dùng cho thư viện log4j.

Vì các lý do cấp phép, nên các thư viện J2EE và liên quan không tự động có sẵn. Bạn sẽ cần đi đến trang web có liên quan, đồng ý với các điều khoản và các điều kiện và tải về các tệp JAR của bạn. Sau đó sử dụng lệnh sau:

Liệt kê 6. Cài đặt các phụ thuộc của bên thứ ba
> mvn install:install-file -Dfile=/opt/apache-tomcat70/lib/servlet-api.jar
   -DgroupId=javax -DartifactId=servlet-api -Dversion=3.0 -Dpackaging=jar

Ví dụ này là các API servlet cần thiết để biên dịch một dự án web J2EE. Để tạo ra một ứng dụng web với cấu trúc dự án tiêu chuẩn, hãy gõ lệnh:

Liệt kê 7. Tạo một ứng dụng web với kiểu cấu trúc dự án tiêu chuẩn
> mvn archetype:generate
        -DarchetypeGroupId=org.apache.maven.archetypes 
        -DarchetypeArtifactId=maven-archetype-webapp
        -DgroupId=com.iotdata -DartifactId=my-webapp

Maven tạo cây dự án trong thư mục my-webapp, bao gồm cả tệp pom.xml. Chúng ta không làm việc đó; thay vào đó, hãy sử dụng dự án mà bạn đã tạo ra trong phần trước. Thêm tệp pom.xml vào thư mục cao nhất của dự án ứng dụng web của bạn:

Liệt kê 8. Thêm tệp pom.xml vào thư mục cao nhất của dự án ứng dụng web
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/maven-v4_0_0.xsd"> 
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.iotdata</groupId>
   <artifactId>CloudAPIClientWeb</artifactId>
   <packaging>war</packaging> 
   <version>1.0</version> 
   <name>IoT Data Cloud API Client Web</name> 
   <url>http://maven.apache.org</url>
   <dependencies> 
      <dependency> 
         <groupId>javax</groupId>
         <artifactId>servlet-api</artifactId> 
         <version>3.0</version>
         <scope>provided</scope> 
      </dependency> 
   </dependencies> 
   <build>
      <finalName>${pom.artifactId}</finalName>
      <sourceDirectory>src</sourceDirectory> 
      <plugins> 
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-war-plugin</artifactId> 
             <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory> 
             </configuration>
         </plugin> 
      </plugins> 
   </build> 
</project>

Lưu ý rằng gói phần mềm là một gói WAR. Tệp pom.xml sử dụng trình cắm thêm WAR của Maven để tạo ra gói WAR. Cấu trúc thư mục của bạn có khác biệt một chút so với cấu trúc tiêu chuẩn, do đó hãy thêm thẻ sourceDirectory, là một đặc tính của phần tử build. Lưu ý rằng bạn đã sử dụng phụ thuộc với API servlet đã mô tả ở trên. Phần tử scope được thiết lập là provided để cho bạn không sao chép JAR của API servlet vào ứng dụng web của bạn.

Để xây dựng nó, hãy thay đổi các thư mục thành my-webapp và gõ lệnh sau:

Liệt kê 9. Bắt đầu xây dựng
> mvn  package

Bạn nên tìm kết quả đầu ra trong tệp CloudAPIClientWeb.war trong thư mục đích. Hãy triển khai kết quả này đến máy chủ ứng dụng của bạn, trỏ trình duyệt của bạn tới http://host:8080/CloudAPIClientWeb và bạn sẽ thấy một trang với dòng chữ "Hello World!"

Bạn có thể quản lý nhiều dự án từ trong một cấu trúc tệp Maven duy nhất bằng cách sử dụng nhiều tệp pom.xml. Bạn sẽ cần làm điều này vì ứng dụng web sẽ được đưa vào trong một ứng dụng doanh nghiệp.

Tạo tệp pom.xml giống như một tệp được hiển thị trong Liệt kê 10 phía trên các thư mục CloudAPIClientEAR và CloudAPIClientWeb.

Liệt kê 10. Tạo các tệp pom.xml bổ sung để quản lý các dự án bổ sung
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion> 
   <groupId>com.iotdata</groupId>
   <version>1.0</version> 
   <artifactId>app</artifactId>
   <packaging>pom</packaging> 
   <modules>
        <module>CloudAPIClientWeb</module>
        <module>CloudAPIClientEAR</module> 
   </modules> 
</project>

Việc này xác định các mô đun cho từng dự án CloudAPIClientWeb và CloudAPIClientEAR.

Liệt kê 11 cho thấy cách tạo ra một tệp pom.xml cho dự án EAR:

Liệt kê 11. Tạo một tệp pom.xml cho dự án EAR
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        http://maven.apache.org/maven-v4_0_0.xsd"> 
   <modelVersion>4.0.0</modelVersion>
   <parent> 
      <groupId>com.iotdata</groupId>
      <artifactId>app</artifactId> 
      <version>1.0</version> 
   </parent>
   <groupId>com.iotdata</groupId>
   <artifactId>CloudAPIClientEAR</artifactId>
   <packaging>ear</packaging> 
   <version>1.0</version> 
   <name>IoT Data Cloud API Client EAR</name> 
   <url>http://maven.apache.org</url>
   <dependencies> 
      <dependency> 
         <groupId>com.iotdata</groupId>
         <artifactId>CloudAPIClientWeb</artifactId> 
         <version>1.0</version>
         <type>war</type> 
      </dependency> 
   </dependencies> 
   <build>
      <finalName>${pom.artifactId}</finalName> 
      <plugins> 
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId> 
            <version>2.4</version>
            <configuration> 
               <earSourceDirectory> ${basedir} </earSourceDirectory>
               <modules> 
                  <webModule> 
                     <groupId>com.iotdata</groupId>
                     <artifactId>CloudAPIClientWeb</artifactId> 
                     <bundleFileName>CloudAPIClientWeb.war </bundleFileName> 
                  </webModule> 
               </modules>
            </configuration> 
         </plugin> 
      </plugins> 
   </build> 
</project>

Tệp pom.xml này định nghĩa một phần tử cha mẹ tham chiếu đến tệp pom.xml mức cao nhất. Bạn cũng cần thêm đoạn mã này vào tệp pom.xml web của bạn. Lúc này, giá trị gói là ear và nó sử dụng trình cắm thêm ear của Maven. Nó định nghĩa mô hình web của dự án web từ trước đó.

Bây giờ hãy xóa và xây dựng lại toàn bộ dự án bằng lệnh sau:

Liệt kê 12. Xóa và xây dựng lại toàn bộ dự án
> mvn clean install

EAR được xây dựng và gồm có tệp WAR của ứng dụng web.

Đây là cách bạn tạo một công việc xây dựng có thể tái sinh được; điều này là quan trọng vì trong các môi trường thử nghiệm và sản xuất, các nhà phát triển không được phép kết nối đến máy chủ ứng dụng với các IDE của họ.

Bây giờ chúng ta hãy xem xét cách sinh ra một trình cắm thêm Maven để cho phép bạn tự động hóa việc tạo và triển khai máy chủ.


Trình cắm thêm Maven để tự động hóa việc tạo và triển khai máy chủ

Trong phần Tự động hóa xây dựng với Maven, chúng ta mô tả cách làm việc với Maven để xây dựng các ứng dụng J2EE. Maven cung cấp một khung công tác mở rộng bằng cách sử dụng một cơ chế trình cắm thêm.

Phần này cho thấy cách tạo ra một trình cắm thêm Maven để tìm kiếm hoặc tạo ra một máy ảo trên đám mây bằng cách sử dụng API của IBM SmartCloud:

  1. Trước hết trình cắm thêm thử tìm kiếm cá thể máy ảo.
  2. Nếu tìm thấy, có thể dùng nó để tạo ứng dụng J2EE.
  3. Nếu không, một máy ảo mới được tạo ra.

Để bắt đầu, hãy tạo một dự án trình cắm thêm Maven mẫu bằng cách sử dụng dòng lệnh:

Liệt kê 13. Tạo trình cắm thêm Maven
>mvn archetype:generate 
-DarchetypeArtifactId=maven-archetype-mojo
-DgroupId=com.ibm.cloud.enterprise.example 
-DartifactId=sce-maven-plugin
-DinteractiveMode=false

Lệnh này tạo ra một cây thư mục dự án của trình cắm thêm với kiểu MOJO (Maven Old Java Object - Đối tượng Java cũ của Maven).

Nhập khẩu dự án vào IDE của bạn và thêm thư viện lõi và thư viện trình cắm thêm của Maven vào đường dẫn xây dựng IDE của bạn. Các trình cắm thêm của Maven thực hiện giao diện Mojo, thường là bằng cách mở rộng lớp AbstractMojo. Thêm mã nguồn cho lớp SCEMojo:

Liệt kê 14. Thêm mã nguồn cho lớp SCEMojo
package com.ibm.cloud.enterprise.example; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import org.apache.maven.plugin.AbstractMojo; 
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log; 
import com.ibm.cloud.api.rest.client.DeveloperCloud; 
import com.ibm.cloud.api.rest.client.DeveloperCloudClient; 
import com.ibm.cloud.api.rest.client.bean.Address; 
import com.ibm.cloud.api.rest.client.bean.Instance; 
import com.ibm.cloud.api.rest.client.bean.Volume; 
import com.ibm.cloud.api.rest.client.exception.*;
        
/** * @goal create_instance */ 
public class SCEMojo extends AbstractMojo 
{ private  DeveloperCloudClient client = DeveloperCloud.getClient(); 
  private Log log = getLog(); 
/** * The user name for the cloud account * @parameter expression=
              "${create_instance.user_name}" */ 
  private String user_name; 
/** * The password for the cloud account * @parameter expression="${create_instance.password}" */ 
  private String password; 
/** * The name of the server to lookup or create * @parameter expression="${create_instance.name}"
        default-value="app_server" */ 
  private String name; 
/** * The data center to create the
        server in * @parameter expression="${create_instance.data_center}" */ 
  private String data_center; 
/** * The image ID to create the server with * @parameter
        expression="${create_instance.image_id}" */ 
  private String image_id; 
/** * The name of the SSH key to create the server with * @parameter expression=
    "${create_instance.key_name}" */
  private String key_name; 
/** * The name of the WebSphere administrative user * @parameter
        expression="${create_instance.was_admin_user}" */ 
  private String was_admin_user;  
/** * The name of the WebSphere administrative user password * @parameter
        expression="${create_instance.was_admin_password}" */ 
  private String was_admin_password; 
}

Mã này đã có các nhập khẩu với các phương thức mà bạn sẽ thêm dưới đây. Javadoc mức-lớp có một thẻ @goal. Thẻ này là bắt buộc và cho biết mục tiêu xây dựng là create_instance. Các trường riêng user_name, password, name, data_center, image_id, key_name, was_admin_userwas_admin_password là các tham số được những người dùng trình cắm thêm chuyển giao. Các tham số là:

  • user_name: Tên người dùng với tài khoản đám mây.
  • password: Mật khẩu cho tài khoản đám mây.
  • name: Tên của máy chủ để tra cứu hoặc tạo, giá trị mặc định="app_server"
  • data_center: Trung tâm dữ liệu để tạo ra máy chủ trong đó.
  • image_id: ID hình ảnh để tạo ra máy chủ với nó.
  • key_name: Tên của khóa SSH để tạo ra máy chủ với nó.
  • was_admin_user: Tên của người dùng quản trị WebSphere.
  • was_admin_password: Tên của mật khẩu người dùng quản trị WebSphere.

Các lớp đang thực hiện giao diện Mojo phải thực hiện phương thức execute. Thêm phương thức execute:

Liệt kê 15. Thêm phương thức execute
public void execute() throws MojoExecutionException 
{ try 
  { log.info("Logging onto cloud with user name " + user_name); 
    client.setRemoteCredentials(user_name, password);
    log.info("Looking for a server with name " + name); 
    List<Instance> instances = client.describeInstances(); 
    log.info("Found " + instances.size() + " instances"); 
    boolean found = false; 
    for (Instance instance: instances) 
    { if ((instance.getStatus() ==  Instance.Status.ACTIVE) 
          && instance.getName().equals(name)) 
      { log.info("Found a server with name " + name); 
        found = true; } 
    } 
    if (!found) 
    { log.info("No server with name " + name + " found"); 
      createInstance(); } 
  } catch (Exception e) 
    { log.warn(e); 
      throw new MojoExecutionException(e.getMessage()); } 
}

Đầu tiên phương thức này thiết lập các thông tin của người dùng, sau đó lấy ra một danh sách các máy ảo thuộc sở hữu của người dùng. Nó lặp qua hết danh sách các máy ảo đang tìm kiếm một cá thể hoạt động có tên giống như tham số do người dùng cung cấp.

Nếu tìm thấy một máy ảo phù hợp, thì bạn đã xong. Nếu không, bạn tạo một máy ảo với phương thứce createInstance() bằng cách thêm phương thức này vào lớp SCEMojo:

Liệt kê 16. Tạo một máy ảo với CreateInstance () bằng cách thêm nó vào lớp SCEMojo
private void createInstance() throws
  InsufficientResourcesException, InvalidConfigurationException, PaymentRequiredException,
  UnauthorizedUserException, UnknownErrorException, IOException 
{ Address address = null;
  Volume volume = null; 
  Address[] secondaryAddresses = new Address[0]; 
  Map parameters = new HashMap<String,Object>(); 
  parameters.put("WASAdminUser", was_admin_user);
  parameters.put("WASAdminPassword", was_admin_password); 
  List<Instance> newInstances =
     client.createInstance( name, // Name of instance data_center, 
     // Data center ID image_id, // Image ID "COP32.1/2048/60", 
     // Instance type key_name, // Key address, // Address volume, 
     // Volume parameters, // Options null, // VLAN ID secondaryAddresses, 
     // Seconday IP addresses true); 
    // Minimum ephemeral 
  Instance instance = newInstances.get(0); 
  log.info("ID: " + instance.getID()); 
}

Phương thức này tạo ra máy ảo với các tham số do người dùng cung cấp và viết ID cá thể vào bản ghi nhật ký.

Như trong Liệt kê 17, bây giờ tạo một tệp pom.xml cho trình cắm thêm:

Liệt kê 17. Tạo một tệp pom.xml cho trình cắm thêm
<?xml version="1.0"?> 
<project
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd" 
   xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   <modelVersion>4.0.0</modelVersion>
   <groupId>com.ibm.cloud.enterprise</groupId>
   <artifactId>sce-maven-plugin</artifactId>
   <version>1.0-SNAPSHOT</version> 
   <packaging>maven-plugin</packaging>
   <name>sce-maven-plugin Maven Mojo</name>
   <url>http://ibm.com/cloud/enterprise</url> 
   <dependencies>
      <dependency> 
         <groupId>org.apache.maven</groupId>
         <artifactId>maven-plugin-api</artifactId> 
         <version>2.0</version>
      </dependency> 
      <dependency> 
         <groupId>junit</groupId>
         <artifactId>junit</artifactId> 
         <version>3.8.1</version>
         <scope>test</scope> 
      </dependency> 
      <dependency>
         <groupId>commons-httpclient</groupId>
         <artifactId>commons-httpclient</artifactId> 
         <version>3.1</version>
         <scope>compile</scope> 
      </dependency> 
      <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId> 
         <version>1.1.1</version>
         <scope>compile</scope> 
      </dependency> 
      <dependency>
         <groupId>commons-codec</groupId>
         <artifactId>commons-codec</artifactId> 
         <version>1.3</version>
         <scope>compile</scope> 
      </dependency> 
      <dependency>
         <groupId>commons-lang</groupId>
         <artifactId>commons-lang</artifactId> 
         <version>2.3</version>
         <scope>compile</scope> 
      </dependency> 
      <dependency>
         <groupId>com.ibm.cloud.enterprise</groupId>
         <artifactId>DeveloperCloud_API_Client</artifactId>
         <version>1.4.1</version> 
         <scope>compile</scope> 
      </dependency>
   </dependencies> 
</project>

Tệp pom.xml sử dụng một kiểu gói maven-plugin. Nó định nghĩa một phụ thuộc maven-plugin-api và các phụ thuộc trên API Java của IBM SmartCloud Enterprise và các thư viện phụ thuộc của nó, Apache HTTP Client, Commons, Logging, Codec và Lang. Maven có thể tự động tải về các thư viện Apache từ kho lưu trữ trung tâm của Maven.

Tải về và cài đặt thư viện API SmartCloud vào kho lưu trữ cục bộ của bạn:

Liệt kê 18. Tải thư viện API SmartCloud vào kho lưu trữ cục bộ của bạn
mvn install:install-file
   -Dfile=/opt/sce/DeveloperCloud_API_Client_1.4.1.jar 
   -DgroupId=com.ibm.cloud.enterprise
   -DartifactId=DeveloperCloud_API_Client -Dversion=1.4.1 
   -Dpackaging=jar

Bây giờ, bạn nên điều chỉnh tham số tệp cho phù hợp với môi trường cục bộ của bạn.

Tiếp theo, hãy xây dựng và cài đặt trình cắm thêm vào kho lưu trữ cục bộ của bạn:

Liệt kê 19. Xây dựng và cài đặt trình cắm thêm vào kho lưu trữ cục bộ của bạn
>mvn package 
>mvn install

Bây giờ bạn có thể sử dụng trình cắm thêm cho một dự án. Hãy tạo dự án cloud-app bằng lệnh generate của Maven:

Liệt kê 20. Tạo một dự án bằng lệnh generate của Maven
mvn archetype:generate 
 -DgroupId=com.ibm.cloud.enterprise
 -DartifactId=cloud-app 
 -DarchetypeArtifactId=maven-archetype-quickstart
 -DinteractiveMode=false

Nhập khẩu các dự án mới vào IDE của bạn. Sửa đổi tệp pom.xml đã tạo ra để thêm một phụ thuộc và cấu hình của trình cắm thêm:

Liệt kê 21. Sửa đổi tệp pom.xml để thêm một phụ thuộc và cấu hình của trình cắm thêm
<?xml version="1.0"?> 
<project
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd" 
   xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.ibm.cloud.enterprise</groupId>
   <artifactId>cloud-app</artifactId> 
   <version>1.0-SNAPSHOT</version>
   <name>cloud-app</name> 
   <url>http://maven.apache.org</url>
   <dependencies> 
      <dependency> 
         <groupId>junit</groupId>
         <artifactId>junit</artifactId> 
         <version>3.8.1</version>
         <scope>test</scope> 
      </dependency> 
      <dependency>
         <groupId>com.ibm.cloud.enterprise</groupId>
         <artifactId>sce-maven-plugin</artifactId>
         <version>1.0-SNAPSHOT</version> 
         <scope>compile</scope>
      </dependency> 
   </dependencies> 
   <build> 
      <plugins> 
         <plugin>
            <groupId>com.ibm.cloud.enterprise</groupId>
            <artifactId>sce-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version> 
            <configuration>
               <user_name>a.user@example.com</user_name> 
               <password>****</password>
               <name>was</name> 
               <data_center>101</data_center>
               <image_id>20015399</image_id> 
               <key_name>july26</key_name>
               <was_admin_user>wasadmin</was_admin_user>
               <was_admin_password>***</was_admin_password> 
            </configuration>
            <executions> 
               <execution> 
                  <phase>compile</phase> 
                  <goals>
                     <goal>create_instance</goal> 
                  </goals> 
               </execution>
            </executions> 
         </plugin> 
      </plugins> 
   </build> 
</project>

Lưu ý sử dụng các tham số trong phần configuration.

Bây giờ bạn đã sẵn sàng để thử trình cắm thêm. Trước tiên kiểm tra với một cá thể mới và cá thể hiện có; gọi ra trình cắm thêm với mục tiêu Maven được hiển thị dưới đây.

Liệt kê 22. Gọi ra trình cắm thêm
>mvn com.ibm.cloud.enterprise:sce-maven-plugin:1.0-SNAPSHOT:create_instance

Nếu bạn chưa có một máy ảo với tên cụ thể, bạn sẽ thấy kết quả đầu ra như sau:

Liệt kê 23. Kết quả đầu ra nếu bạn CHƯA có một máy ảo với tên cụ thể
[info] Logging onto cloud with user name a.user@example.com
[info] Looking for a server with name was 
[info] Found 4 instances 
[info] No server with name was found 
[info] ID: 112332 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ...

Nếu bạn đã có một máy ảo với tên cụ thể, bạn sẽ thấy kết quả đầu ra như sau:

Liệt kê 24. Kết quả đầu ra nếu bạn CÓ một máy ảo với tên cụ thể
... 
[INFO] --- sce-maven-plugin:1.0-SNAPSHOT:create_instance (default-cli) @ cloud-a pp --- 
[info] Logging onto cloud with user name aamies@cn.ibm.com
[info] Looking for a server with name was 
[info] Found 5 instances 
[info] Found a server with name was 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ---------------------------------------------------------------------- ...

Nên nhớ rằng nếu bạn vừa mới thực hiện lệnh trong Liệt kê 22 để tạo ra một máy chủ, phải mất một chút thời gian để tạo.

Vì vậy, trong bài này, đây đã là một cách tốt để thấy đám mây có thể thêm vào vòng đời phát triển và triển khai như thế nào, nhưng bạn có một vài bước nữa để làm cho quá trình này thậm chí còn có ích hơn trong vòng đời này.

Chúng ta đã giải thích rằng phải mất một thời gian để tạo ra một máy chủ. Bạn cần một cơ chế thăm dò để chờ việc này hoàn thành; tuy nhiên, ở đây có một thách thức bổ sung là xác định khi nào tự máy chủ ứng dụng đã bắt đầu chạy, điều đó sẽ chỉ có sau khi việc cung cấp máy ảo và hệ điều hành đã khởi động. Bạn có thể sử dụng các API wasadmin của WebSphere cho việc này. Khi bạn có một máy chủ chủ động với máy chủ ứng dụng đang chạy, bạn có thể triển khai ứng dụng J2EE của chúng ta với nó. Khi bạn không còn liên quan đến máy chủ WebSphere, bạn có thể muốn xóa nó. Bạn có thể muốn thêm điều đó vào giai đoạn xóa vòng đời hoặc ở một nơi khác.


Các bước tiếp theo

Một số nhiệm vụ thêm nữa mà bạn có thể muốn nhận hoặc đưa vào:

  • Tạo một kho lưu trữ Maven riêng trên IBM Cloud. Đây là một nhiệm vụ quan trọng vì một doanh nghiệp sẽ thường muốn giữ phần mềm chưa được phát hành, phần mềm độc quyền hoặc phần mềm thương mại đã mua của mình tách biệt khỏi phần mềm nguồn mở đã phát hành được lưu trong các kho lưu trữ công cộng. Điều này sẽ đơn giản háo việc chia sẻ phần mềm trong doanh nghiệp và với các đối tác kinh doanh và giữ cho nó tách ra khỏi công chúng nói chung.
  • Tạo một khuôn mẫu dự án API đám mây. Một khuôn mẫu dự án là có ích để đơn giản hóa việc tạo ra nhiều dự án đám mây, tiêu chuẩn hóa các hướng dẫn thực hành tốt nhất và loại trừ sự lặp lại.

Các máy chủ ứng dụng J2EE có một số tính năng hỗ trợ đạt được các mục tiêu hiệu năng và tính sẵn sàng. Một trong những tính năng chính là khả năng tạo cụm các máy chủ ứng dụng để phân phối tải. Một cụm là một nhóm các nút máy chủ ứng dụng hoặc các máy chủ ứng dụng riêng làm việc theo nhóm để cân bằng tải làm việc. Trong điện toán đám mây, bạn có cơ hội để tạo các máy ảo động và chúng có thể hoạt động như các nút trong cụm.

WebSphere Application Server là một nền tảng J2EE đặc biệt thích hợp để quản lý các cụm quy mô lớn. Có thể tạo kịch bản lệnh tất cả các bước có thể được thực hiện trong giao diện quản trị WebSphere bằng công cụ và các lệnh của wsadmin, bao gồm các chương trình Java với các kịch bản lệnh JMX (Java Management eXtensions – Các phần mở rộng quản lý Java) và Jython. Bạn có thể kết hợp kiến thức này của mô hình triển khai mạng WebSphere với kiến thức về tạo và tùy chỉnh các hình ảnh và những gì bạn đã học về API REST của IBM SmartCloud để tự động hóa việc cung cấp các phần tử của một cụm WebSphere. Bạn làm điều này bằng cách:

  1. Bắt đầu với một hình ảnh WebSphere Application Server cơ sở, sau đó tùy chỉnh lược tả với Profile Management Tool (Công cụ quản lý lược tả) và máy chủ ứng dụng với giao diện quản trị.
  2. Lưu máy ảo vào một cá thể với giao diện người dùng IBM Cloud hoặc API REST.
  3. Sử dụng API REST của IBM Cloud để cung cấp các máy ảo mới.
  4. Sử dụng công cụ wsadmin để nối các máy ảo mới với cụm và đồng bộ hóa việc triển khai ứng dụng trên các nút, gồm cả việc triển khai ứng dụng J2EE của bạn.

Kết luận

Bài này đã giới thiệu cho bạn một dự án J2EE mẫu để sử dụng trên IBM Cloud; một hình ảnh của WebSphere Application Server cung cấp một môi trường J2EE mà không cần phải cài đặt bất kỳ phần mềm bổ sung nào. Nó đã phác thảo các bước để thiết lập Apache Maven trong môi trường của bạn để bắt đầu với việc tự động hóa xây dựng. Chúng tôi đã mô tả cách làm việc với Maven để xây dựng các ứng dụng J2EE. Nó đã cho bạn thấy cách tạo ra một trình cắm thêm Maven để tìm kiếm hoặc tạo ra một máy ảo trên đám mây bằng cách sử dụng API của IBM SmartCloud. Và như là món quà tặng thêm, chúng tôi đã nêu ra cho bạn đường dẫn đến một số nhiệm vụ tương tự khác mà bạn có thể muốn làm, gồm có cách để tạo ra một kho lưu trữ Maven riêng trên IBM Cloud và cách xây dựng một khuôn mẫu dự án API đám mây.

Điều duy nhất còn lại để bạn làm là trải nghiệm.

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Công nghệ Java, Nguồn mở
ArticleID=820273
ArticleTitle=Tự động hóa phát triển và quản lý các máy ảo đám mây
publish-date=06082012