gpt4 book ai didi

continuous-integration - 如何将 Play 与自定义模块和持续集成一起使用

转载 作者:行者123 更新时间:2023-12-04 07:42:50 26 4
gpt4 key购买 nike

如何在 CI 系统中设置 Play 应用程序和(自定义)Play 模块的构建,以便在模块构建良好时,构建将模块工件安装到本地存储库和/或将它们部署到远程存储库,并且应用程序使用该存储库中的工件?

该解决方案也应该适用于在本地工作的开发人员。

我正在使用 Jenkins ,无论我尝试这样做,都会遇到麻烦。

在我详细说明我遇到的所有问题之前,我会等待,因为它很费力,也许其他人可以提供他们如何做到这一点。

最佳答案

我在 jenkins 中有一个从开发到生产都运行良好的设置。

首先这里是自定义模块存储库的 dependencies.yml 中的配置

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 -> *

有了这个开发人员和 Jenkins 首先在同一个存储库中搜索以查看是否存在模块,如果不存在,则到 nexus 存储库下载工件。

要在 jenkins 中构建我的模块,我使用这样的自定义 sh 脚本
#!/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 "file=@dist/$APPLICATION-$VERSION.zip" --verbose

使用此脚本,您可以在每个 jenkins 构建时将您的模块推送到 nexus。这不是我真正要做的。我只在构建发布时使用 jenkins 发布模块来推送它。对于一个版本,我有一个特殊的脚本
#!/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 "file=@dist/$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"

该脚本在我们的 svn 存储库中放置了一个标签,将模块推送到 nexus 并更新 dependencies.yml 文件。

有了这个 jenkins 可以构建一个依赖于本地版本的模块的应用程序,而它还没有发布,然后可以通过从 nexus 存储库下载模块 artifcat 来构建应用程序。对于开发人员来说也是一样的

关于continuous-integration - 如何将 Play 与自定义模块和持续集成一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8321241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com