Tôi có thiết lập trong jenkins hoạt động tốt từ dev đến sản xuất.
Đầu tiên đây là cấu hình trong dependencies.yml cho kho mô-đun tùy chỉnh
repositories:
- modules:
type: chain
using:
- localModules:
type: local
descriptor: "${application.path}/../[module]/conf/dependencies.yml"
artifact: "${application.path}/../[module]"
- repoModules:
type: http
artifact: "http://mynexus/nexus/content/repositories/releases/com/myorg/[module]/[revision]/[module]-[revision].zip"
contains:
- com.myorg -> *
Với các nhà phát triển này và Jenkins tìm kiếm đầu tiên trong kho cùng để xem nếu một module có mặt và nếu không, đã đến kho lưu trữ nexus để tải xuống phần tạo tác.
Để xây dựng mô-đun của tôi trong Jenkins tôi sử dụng một kịch bản tùy chỉnh sh như thế này
#!/bin/bash
APPLICATION="myModule"
PLAY_PATH="/usr/local/play"
set –xe
$PLAY_PATH/play deps --sync
$PLAY_PATH/play build-module --require 1.2.3
VERSION=`grep self conf/dependencies.yml | sed "s/.*$APPLICATION //"`
echo "Sending $APPLICATION-$VERSION.zip to nexus repository"
curl --request POST --user user:passwd http://mynexus/nexus/content/repositories/releases/com/myorg/$APPLICATION/$VERSION/$APPLICATION-$VERSION.zip -F "[email protected]/$APPLICATION-$VERSION.zip" --verbose
Với kịch bản này, bạn có thể đẩy mô-đun của bạn để mối quan hệ trên mỗi Jenkins xây dựng. Đây không phải là những gì tôi làm. Tôi sử dụng mô-đun phát hành jenkins để đẩy nó chỉ khi tôi xây dựng một bản phát hành. Đối với bản phát hành, tôi có một tập lệnh đặc biệt
#!/bin/bash
APPLICATION="myModule"
PLAY_PATH="/usr/local/play"
set –xe
if [ -z "$RELEASE_VERSION" ]
then
echo "Parameter RELEASE_VERSION is mandatory"
exit 1
fi
if [ -z "$DEVELOPMENT_VERSION" ]
then
echo "Parameter DEVELOPMENT_VERSION is mandatory"
exit 1
fi
echo "Release version : $RELEASE_VERSION"
echo "Development version : $DEVELOPMENT_VERSION"
VERSION=`grep self conf/dependencies.yml | sed "s/.*$APPLICATION //"`
if [ "$RELEASE_VERSION" != "$VERSION" ]
then
echo "Release version $RELEASE_VERSION and play version $VERSION in dependencies.yml does not match : release failed"
exit 1
fi
REVISION=`svnversion .`
echo "Tag svn repository in revision $REVISION with version $VERSION"
svn copy -m "Version $VERSION" -r $REVISION http://mysvn/myRepo/$APPLICATION/trunk/ http://mysvn/myRepo/$APPLICATION/tags/$VERSION
echo "svn tag applied"
echo "Sending $APPLICATION-$VERSION.zip to nexus repository"
curl --request POST --user user:passwd http://mynexus/nexus/content/repositories/releases/com/myorg/$APPLICATION/$VERSION/$APPLICATION-$VERSION.zip -F "[email protected]/$APPLICATION-$VERSION.zip" --verbose
echo "$APPLICATION-$VERSION.zip sent to nexus repository"
echo "Update module to version $DEVELOPMENT_VERSION"
sed -i "s/self\(.*\)$VERSION/self\1$DEVELOPMENT_VERSION/g" conf/dependencies.yml
svn commit -m "Version $DEVELOPMENT_VERSION" conf/dependencies.yml
svn update
echo "Version $DEVELOPMENT_VERSION créée"
Tập lệnh này đặt thẻ vào kho svn của chúng tôi, đẩy mô-đun vào mối quan hệ và cập nhật tệp dependencies.yml.
Với jenkins này có thể xây dựng một ứng dụng phụ thuộc vào phiên bản địa phương của mô-đun trong khi nó không được phát hành và sau đó có thể xây dựng ứng dụng bằng cách tải xuống mô-đun artifcat từ kho nexus. Điều tương tự đối với nhà phát triển
Nguồn
2011-11-30 11:08:27
Tôi nghĩ rằng kỹ thuật này sẽ tạo sự khác biệt trong thiết lập của tôi; Tôi chưa có thời gian để thử nó, đó là lý do tại sao tôi chưa chấp nhận nó. Câu hỏi tiếp theo: cấu hình repo localModules của bạn không giống như nó sẽ khớp với một thiết lập Jenkins điển hình, nơi không gian làm việc xây dựng không nằm trong các thư mục liền kề. Tôi là một chút bối rối như từ nơi Jenkins của bạn xây dựng lấy phụ thuộc cho dev (như trái ngược với phát hành) phiên bản. – Ladlestein
Trong jenkins, tôi chỉ có một vùng làm việc và tất cả các thư mục mô-đun của tôi nằm liền kề như trong dev. Nếu không, bạn phải xuất bản vật phẩm của bạn trong nexus mỗi khi bạn xây dựng một mô-đun, với một số loại phiên bản chụp nhanh sẽ tẻ nhạt hơn để thiết lập và sử dụng –