2012-05-23 25 views

Trả lời

1

Sau khi sử dụng Jenkins trong một thời gian, tôi thấy bạn nên sử dụng càng ít công việc càng tốt nếu bạn muốn sử dụng lại thư mục nguồn.

Thiết lập mặc định trong Jenkins là mỗi bản dựng sử dụng một thư mục khác làm không gian làm việc của nó. Điều đó ngụ ý rằng bạn thực hiện hoàn thành SVN checkout mọi build.Mà mất mãi mãi.

Nếu bạn muốn sử dụng cùng một thư mục nguồn cho mọi bản dựng, bạn phải lo lắng về việc đồng bộ hóa: Chỉ một bản dựng tại một thời điểm. Theo như tôi biết, Jenkins không có phương tiện đồng bộ hóa tích hợp. Cách duy nhất là chỉ sử dụng một người thực thi. Thậm chí sau đó bạn không thể kiểm soát cách người thực hiện lựa chọn công việc tiếp theo của mình.

Giả sử công việc "SVN update" kích hoạt công việc "Xây dựng". Ai đó bắt đầu "SVN update # 33", được cho là sẽ kích hoạt "Build # 33". Tuy nhiên, nếu tính năng "Poll SCM" của Jenkins lên lịch "SVN update" # 34 trong khi chờ đợi, tôi chưa tìm ra cách để nói rằng "Build # 33" phải chạy trước "SVN update # 34". Vì vậy, bạn có thể kết thúc với "SVN cập nhật # 34" chạy trước khi "Xây dựng # 33", và tất cả mọi thứ không thành công. Trừ khi bạn vô hiệu hóa thủ công việc bỏ phiếu. Và hãy nhắc nhở chính mình để kích hoạt lại nó sau đó, tất nhiên.

Dù sao. Sau khi sử dụng Jenkins trong hai năm, tôi thay đổi câu trả lời của mình thành: Không bao giờ sử dụng nhiều công việc chia sẻ tài nguyên (như thư mục nguồn), và đưa tất cả logic vào các kịch bản lệnh shell (đối với cấu hình vòng lặp).

+0

Bạn có thể sử dụng [Trình chặn xây dựng Jenkins] (https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin) -plugin để chặn "SVN update" -job trong khi "Xây dựng" - công việc đang chạy. –

8

Sử dụng Jenkins Matrix job. Xác định một trong các trục là build_mode với các giá trị Gỡ lỗiPhát hành. Sau đó bạn chạy CMake để tạo cả hai cấu hình cho công cụ biên dịch mà bạn sẽ sử dụng (XCode, gcc, VisualStudio, v.v.). Sau đó, bạn có thể sử dụng build_mode như thể đó là biến môi trường và chuyển nó để tạo các bước thực hiện biên dịch thực tế.

+0

Cảm ơn câu trả lời của bạn. Tôi đã đoán được nhiều, nhưng tôi vẫn mất một thời gian để tiết lộ chi tiết. –

+1

Nếu câu trả lời thực sự hữu ích, vui lòng xem xét [chấp nhận] (http://meta.stackexchange.com/a/5235/177981) hoặc [upvoting] (http://meta.stackexchange.com/a/130054/177981) nó. –

+0

tác phẩm này với cmakeplugin? Tôi đặt $ build_type trong "Loại xây dựng khác" nhưng nó không mở rộng nó. – shenshei

9

Hãy cho tôi một thời gian để tìm hiểu điều này. Đây là cách tôi quản lý để làm điều đó.

  1. Tạo công việc miễn phí "Thanh toán". Công việc này sẽ làm tất cả những thứ không phụ thuộc vào kiểu cấu hình (Debug/Release).
  2. Trong "Quản lý mã nguồn", hãy chọn Subversion
  3. Điền vào URL của kho lưu trữ. Có lẽ là một ý tưởng tốt để làm cho nó trỏ đến/trunk.
  4. Đặt dir mô-đun cục bộ thành "." (không có báo giá)
  5. Khi chiến lược kiểm tra "Thi đua sạch" đẹp
  6. Trình kích hoạt trình tạo Thăm dò ý kiến ​​SCM, đặt Lịch biểu thành "5 * * * *" để kiểm tra 5 phút một lần.
  7. Hiện tại trong Tùy chọn dự án nâng cao, chọn 'Sử dụng không gian làm việc tùy chỉnh' và đặt thư mục thành ví dụ: "c:/src". Chúng tôi không muốn Jenkins sử dụng không gian làm việc nội bộ của họ, bởi vì chúng tôi muốn các công việc khác có thể truy cập nguồn.
  8. Trong phần Xây dựng, thêm lệnh lô Windows sau đây, được sử dụng để làm sạch thư mục xây dựng. Vì lý do nào đó, CMake không cung cấp cách để làm điều này.

    cd c:\ 
    rmdir /S /Q build 
    mkdir build 
    cd build 
    
    cmake --version 
    rem optionally: svn info c:\src 
    cmake -G "Visual Studio 10" c:\src 
    
  9. Tạo một công việc khác "Xây dựng", lần này là công việc "đa cấu hình". Công việc này sẽ chạy cho mỗi cấu hình (Debug/Release).

  10. Đầu tiên, thiết lập Build Kích hoạt để xây dựng sau khi công việc "Thanh toán"
  11. Bây giờ dưới Cấu hình Matrix thêm một trục "cấu hình" với các giá trị "Debug Release" (khoảng trắng = separator). Thật không may, plugin xây dựng CMake cho Jenkins không hoạt động với các công việc đa cấu hình. Chúng ta thậm chí không thể sử dụng cmake --build, vì nó luôn xây dựng cấu hình Debug. Để xây dựng, chúng ta phải sử dụng một tập lệnh batch:

    cd c:\build 
    call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 
    msbuild ALL_BUILD.vcxproj /verbosity:minimal /maxcpucount:1 /property:Configuration=%configuration% 
    

Nếu bạn muốn xây dựng toàn bộ giải pháp, chỉ định file sln thay vì ALL_BUILD.vcxproj. Nếu bạn chỉ muốn xây dựng một dự án cụ thể, hãy sử dụng

msbuild <solution>.sln /target:<project> 
+1

Theo như tôi biết, "camke --build". sẽ luôn xây dựng phiên bản gỡ lỗi. Bạn phải làm msbuild Project.sln/m/p: Configuration = Release để phát hành – Lap

+0

Ugh, bạn nói đúng. Tôi sẽ thay đổi câu trả lời của tôi cho phù hợp. –

3

Khi sử dụng máy phát điện Visual Studio bạn có thể vượt qua các cấu hình để xây dựng cho cmake --build -Command:

cmake --build . --config Release 
cmake --build . --config Debug 

Xem thêm các CMake docs.

+1

Nó phụ thuộc vào máy phát điện bạn đang sử dụng. Điều này sẽ không có hiệu lực đối với các máy phát điện như Makefile. Bạn không cần phải quên để vượt qua tùy chọn CMAKE_BUILD_TYPE để tạo bước: 'cmake -DCMAKE_BUILD_TYPE = Release' –

+0

Vì câu hỏi là về Windows tôi giả định Visual Studio, tôi sẽ chỉnh sửa câu trả lời của mình. –

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