用于生产和开发的 Jenkins 管道部署
Jenkins pipeline deployment for production and development
我正在为 dev 和 prod 自动部署 sqoop 作业,这些作业必须针对每种类型分配到特定服务器上。对于这些作业,与每个 sqoop 作业关联的脚本需要根据开发与生产进行更改。目前,我有一个 git 存储库,其中包含一个 dev 和 prod 文件夹,其中批准的开发更改被放入 prod 文件夹,但变量(对 dev 数据库与 prod 数据库的引用)发生了变化。然后我有两个 jenkins 管道,它们相互关联并具有独立的触发器。这太骇人听闻了。
我目前的计划是整合到一个文件夹中,并将所有变量替换为一个伪变量,例如 %DBPREFIX%,然后让每个关联的管道正则表达式并在编译时将所有匹配项替换为其关联的数据库前缀。
需要更改的文件是shell脚本和hive脚本,所以我不能只在Jenkins节点内定义一个环境变量shell。
有没有更好的方法来处理这个问题?
tl;dr:我需要在不同的文件中设置变量,这些变量可以通过 jenkins 管道自动更改。
您实际上可以在 shell 脚本和配置单元脚本中引用环境变量。
在 shell 脚本中引用 $HOT_VAR:
echo $HOT_VAR
在配置单元脚本中引用 $HOT_VAR:
select * from foo where day >= '${env:HOT_VAR}'
我不确定这是否是配置单元脚本的示例。也许你想看 。 :)
如果你真的因为某种原因无法使用环境变量,你可以使用命令行工具,如 awk、sed 或 perl(为什么人们总是建议使用 perl 而不是 ruby?)来搜索和替换您需要配置的文件(可能基于环境变量)。
我正在为 dev 和 prod 自动部署 sqoop 作业,这些作业必须针对每种类型分配到特定服务器上。对于这些作业,与每个 sqoop 作业关联的脚本需要根据开发与生产进行更改。目前,我有一个 git 存储库,其中包含一个 dev 和 prod 文件夹,其中批准的开发更改被放入 prod 文件夹,但变量(对 dev 数据库与 prod 数据库的引用)发生了变化。然后我有两个 jenkins 管道,它们相互关联并具有独立的触发器。这太骇人听闻了。
我目前的计划是整合到一个文件夹中,并将所有变量替换为一个伪变量,例如 %DBPREFIX%,然后让每个关联的管道正则表达式并在编译时将所有匹配项替换为其关联的数据库前缀。
需要更改的文件是shell脚本和hive脚本,所以我不能只在Jenkins节点内定义一个环境变量shell。
有没有更好的方法来处理这个问题?
tl;dr:我需要在不同的文件中设置变量,这些变量可以通过 jenkins 管道自动更改。
您实际上可以在 shell 脚本和配置单元脚本中引用环境变量。
在 shell 脚本中引用 $HOT_VAR:
echo $HOT_VAR
在配置单元脚本中引用 $HOT_VAR:
select * from foo where day >= '${env:HOT_VAR}'
我不确定这是否是配置单元脚本的示例。也许你想看 。 :)
如果你真的因为某种原因无法使用环境变量,你可以使用命令行工具,如 awk、sed 或 perl(为什么人们总是建议使用 perl 而不是 ruby?)来搜索和替换您需要配置的文件(可能基于环境变量)。