现在我们的Jenkins代理为每个Rails项目生成一个docker-compose.yml,然后运行docker-compose.docker-compose.yml有一个主"web"容器,里面有rbenv和我们所有其他Rails依赖项.它链接到包含测试Postgres DB的数据库容器.
当我们需要实际运行测试并生成退出代码时,问题就出现了.我们的CI服务器仅在测试脚本返回exit 0时才会部署,但docker-compose总是返回0,即使其中一个容器命令失败也是如此.
另一个问题是DB容器无限期运行,即使在Web容器完成运行测试之后也是如此,因此docker-compose up永远不会返回.
有没有办法在这个过程中使用docker-compose?我们需要能够运行容器,但在Web容器完成后退出并返回它的退出代码.现在,我们手动使用docker来启动数据库容器并使用--link选项运行Web容器.
我有以下插件来运行.sh脚本:
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<executions>
<execution>
<id>deploy-bundles</id>
<phase>install</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${basedir}/deploy.sh</executable>
<successCodes>
<successCode>0</successCode> <-- Not working
</successCodes>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
它将一些文件夹和文件复制到某些位置。有用。但是,为了以防万一,我希望有一个失败错误机制。set -e我的.sh脚本中已经有了命令,但我也想要一个 Maven 解决方案。我听说有一个名为的标签successCodes,我尝试合并它。但到目前为止没有运气。有人能指出正确的做法吗?
编辑:我的.sh脚本如下所示:
cp ../template/config.properties $component/conf
cp ../../runtime/group1/group1.mw/conf/log4j.xml $component/conf
# if the component is planning, create an additional folder called plans
if [[ $component == *".planning"* ]]
then
mkdir -p $component/plans
# copy all the plans here
cp ../../mission.planning/plans/* $component/plans
fi
Run Code Online (Sandbox Code Playgroud)
如果这些文件夹/文件不存在,预计会失败。因此,作为测试,我手动更改了上面的路径并期望它失败。它确实使执行过程失败并告诉我错误(因为我set …