gpt4 book ai didi

packaging - 构建 RPM 包以选择性地部署源

转载 作者:行者123 更新时间:2023-12-02 10:22:16 27 4
gpt4 key购买 nike

我对 RPM 还算陌生,但我一直在使用它,需要做一些有点左的事情。

我必须遵守规则,即我必须在每个环境中使用相同的rpm包,我不能使用%pre和%post来修改文件。

问题是我的安装没有执行 make,事实上我正在复制文本文件和 xml 文件的文件结构。然而,这些文件包含特定于环境的代码,但遗憾的是我必须遵循这些准则。

我考虑过的“解决方案”是使用多个源文件,source0 是开发文件,source1 是测试文件,source2 是生产文件,而 source3 是灾难恢复文件。每个源都会提取到具有环境名称的文件夹(这是所需的!)

$deploy_folder/dev_code

$deploy_folder/test_code

$deploy_folder/prd_code

我将获得一个环境变量,它告诉我环境。

到目前为止,我已经部署了所有源,然后使用条件删除了不必要的文件夹

if [[ $env_variable == "PRD"]] ;那么

rm -rf $buildroot/install/$deploy_folder/dev_code

rm -rf $buildroot/install/$deploy_folder/test_code

fi

*我稍微简化了上面的变量

这似乎在构建时有效,但是当我执行 rpm -i 时,它不会部署所有代码,然后删除最终目的地的其他文件夹。

显然,我可能没有以正确的方式使用 RPM,那么我这样做的方法正确吗?鉴于我的文件基本上都是特定于环境的,是否有更好的方法?

如何访问部署到最终目的地的代码?

谢谢

最佳答案

您要求的是用于开发、测试和生产环境的单个 rpm。在构建时,您显然需要构建所有文件。我假设您正在构建一切正常,即在 %build 部分中您已将文件复制到

$RPM_BUILD_ROOT/$deploy_folder/dev_code
$RPM_BUILD_ROOT/$deploy_folder/test_code
$RPM_BUILD_ROOT/$deploy_folder/prd_code

然后将这些文件包含在使用 %files 部分生成的 rpm 中。

您始终可以使用以下方法检查构建 rpm 是否在正确位置有文件:

rpm -qpl <rpm file.rpm>

因为您希望在安装时根据环境变量的存在进行安装,所以可以使用 %post 。这是安装 rpm 后使用的部分。如果您希望在卸载期间进行一些清理,可以使用 %postun(或 %preun)部分。假设 $TESTENV 是环境变量,其中有用于生产的 PRD、用于开发的 DEV 和用于测试的 TEST,可以使用 %post 部分中的以下部分:

if if [ "$TESTENV" = "PRD" ]; then
rm -rf $deploy_folder/dev_code
rm -rf $deploy_folder/test_code
fi
if [ "$TESTENV" = "DEV" ]; then
rm -rf $deploy_folder/prd_code
rm -rf $deploy_folder/test_code
fi
if [ "$TESTENV" = "TEST" ]; then
rm -rf $deploy_folder/dev_code
rm -rf $deploy_folder/prd_code
fi

不建议为 PRD、TEST、DEV 创建单个 rpm,但如果您有这样的要求,您的方法似乎没问题。

%pre、%post、%preun、%postun 是安装时使用的部分,可以在安装时检查环境变量。显然,您不能在构建时执行此操作,因此您必须使用这些部分。如果您必须避免它们,那么您可能需要放弃对所有产品、开发和测试使用单一 rpm 的想法。降低单个转速是一个更好的主意。单个规范文件也可以为 prod、test 和 devel 创建三种不同的 rpm 作为 sybpackage。另一种方法是为所有三个产品生成单独的 rpm,并从单个规范进行测试和开发(不区分不同的环境,并且 rpm 中没有类似文件的 3 个副本。

关于packaging - 构建 RPM 包以选择性地部署源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12979714/

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