2013-08-09 31 views
7

Tôi đang cố gắng tạo nhiều cấu hình Maven trong một công việc Jenkins đơn lẻ. Mỗi hồ sơ thay đổi một số mã và sau đó tạo ra một bình bằng cách thực hiện mvn -Pdev install sau đó mvn -Pprod install trong dòng lệnh (Theo Maven sử dụng mvn -Pdev,prod install là nghĩa vụ phải làm việc nhưng nó không làm việc cho tôi). Dưới đây là hai cấu hình trong dự án của tôi pom.xml:Xây dựng nhiều tiểu sử Maven cho một công việc Jenkins duy nhất

<profiles> 
<!-- prod profile --> 
    <profile> 
    <id>prod</id> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>com.google.code.maven-replacer-plugin</groupId> 
       <artifactId>replacer</artifactId> 
       <version>1.5.2</version> 

       <executions> 
        <execution>      
         <phase>process-resources</phase> 
         <goals> 
          <goal>replace</goal> 
         </goals> 
        </execution> 
       </executions> 

       <configuration> 

         <file>src/main/java/com/IQzone/android/configuration/AbstractHoldingRefreshable.java</file> 
        <replacements> 
         <replacement> 
          <token>TrUe</token> 
          <value>TOAST_SWITCH</value> 
         </replacement> 
        </replacements> 

       </configuration> 

      </plugin> 

     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
       <goal>jar</goal> 
       </goals> 
       <configuration> 
       <classifier>prod</classifier> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 


<!-- dev profile --> 
    <profile> 
    <id>dev</id> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>com.google.code.maven-replacer-plugin</groupId> 
       <artifactId>replacer</artifactId> 
       <version>1.5.2</version> 

       <executions> 
        <execution>      
         <phase>process-resources</phase> 
         <goals> 
          <goal>replace</goal> 
         </goals> 
        </execution> 
       </executions> 

       <configuration> 

        <file>src/main/java/com/IQzone/android/configuration/AbstractHoldingRefreshable.java</file> 
        <replacements> 
         <replacement> 
          <token>TOAST_SWITCH</token> 
          <value>TrUe</value> 
         </replacement> 
        </replacements> 

       </configuration> 

      </plugin> 

      <!-- build project with JAVA 1.6 --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 


     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
      <skip>true</skip> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
       <goal>jar</goal> 
       </goals> 
       <configuration> 
       <classifier>dev</classifier> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 



     </plugins> 
    </build> 
    </profile> 
</profiles> 

Làm thế nào tôi thiết lập Jenkins để tự động xây dựng cả hai cấu hình cho một công việc Jenkins đơn bất cứ khi nào công việc được đánh cho một xây dựng? Và đặt cả hai lọ này vào trong Artifactory? Tôi có rất ít kiến ​​thức về Jenkins và không có nhiều thông tin về điều này trên web.

Trả lời

9

Trong Maven, nếu bạn sử dụng mvn -Pdev,prod, thì bạn sẽ kích hoạt cả hai cấu hình cùng lúc trong một lệnh.

Có vẻ như bạn muốn 2 chạy riêng biệt của lệnh, tức là một cái gì đó bạn sẽ đạt được trên dòng lệnh bằng cách làm 2 xây dựng:

mvn -Pdev install; mvn -Pprod install 

Trong Jenkins bạn có thể đạt được điều này với một trong hai

  • một công việc dự án kiểu miễn phí (với 2 nhà xây dựng vỏ chạy các nhiệm vụ mvn -P$PROFILE install)
  • 2 công việc loại maven (mà bạn có thể chuỗi một công việc khác bằng cách sử dụng "xây dựng sau khi các dự án khác được xây dựng").
13

Bạn có thể tạo công việc ma trận Jenkins. Một công việc ma trận cho phép cùng một công việc để chạy với các thiết lập thay đổi (trong trường hợp của bạn: một chuỗi).

Mỗi cài đặt thay đổi được gọi là trục. Trong trường hợp của bạn, bạn sẽ tạo ra một trục chuỗi có chứa hai giá trị: dev và prod.

Bằng cách đó, công việc của bạn sẽ chạy hai lần, với cả hai giá trị.

Tuy nhiên: việc sử dụng hồ sơ của bạn rất nguy hiểm. Vì cấu hình được sử dụng để chạy bản dựng không được mã hóa thành tạo tác của bạn, nên việc ngắt bản sửa đổi "một nguồn nên luôn dẫn đến chính xác cùng một mục tiêu" của Maven (xem: http://www.blackbuild.com/how-to-really-use-maven-profiles-without-endangering-your-karma/ để được giải thích chi tiết hơn)

tạo hai tạo phẩm khác nhau bằng cách sử dụng trình phân loại (-dev và -prod) hoặc thậm chí tốt hơn: tạo hai mô-đun riêng biệt cho bản dựng của bạn, mỗi mô hình chỉ tạo một trong các tạo phẩm đích của bạn.

+0

Tôi gặp vấn đề tương tự như vậy.Tôi đã đặt trong liên kết này, bạn có thể xin vui lòng có một cái nhìn vào nó và cho tôi biết nếu bạn có bất kỳ giải pháp. https://stackoverflow.com/questions/48002535/one-profile-properties-are-overriding-with-another-profile-properties-in-maven – SubbaReddy

0

Bạn có thể làm điều đó bằng cách thiết lập id thi khác nhau cho mỗi thực hiện và sau đó kích hoạt các lệnh

mvn -Pdev,prod clean package install

1

Ngoài Matrix công việc và nhiều maven lời gọi trong một công việc tự do phong cách, có một cách khác: Run top-level Maven targets làm bước xây dựng trước và chạy lệnh khác thông qua plugin maven jenkins.

Đảm bảo rằng bước dựng sẵn sử dụng cùng một repo maven giống như lệnh khác bằng cách cung cấp -Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}.

Vui lòng tham khảo các câu trả lời khác để biết chi tiết về công việc ma trận, v.v.

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