我正致力于使用sqoop作业自动部署dev和prod,这些作业必须被划分到每种类型的特定服务器上。使用这些作业,每个sqoop作业关联的脚本需要根据dev vs prod进行更改。目前,我有一个包含dev和prod文件夹的git repo,其中已批准的dev更改放在prod文件夹中,但变量(对dev database vs prod database的引用)已更改。然后我有两个jenkins管道,每个管道都与每个管道相关并具有独立的触发器。这太令人难以置信了。
我目前的计划是整合到一个文件夹中,用一个伪变量替换所有变量,例如%DBPREFIX%,然后使用每个关联的管道正则表达式,并在编译时将所有匹配替换为其关联的数据库前缀。
需要更改的文件是shell脚本和hive脚本,因此我不能只在Jenkins节点shell中定义环境变量。
有没有更好的方法来解决这个问题?
tl; dr:我需要在不同的文件中设置变量,这些变量可以通过jenkins管道自动更改。
答案 0 :(得分:1)
您实际上可以在shell脚本和配置单元脚本中引用环境变量。
在shell脚本中引用$ HOT_VAR:
echo $HOT_VAR
在hive脚本中引用$ HOT_VAR:
select * from foo where day >= '${env:HOT_VAR}'
我不确定这是否是hive脚本的示例。也许你想看到https://stackoverflow.com/a/12485751/6090676。 :)
如果由于某种原因你真的无法使用环境变量,你可以使用命令行工具,如awk,sed或perl(为什么人们总是建议使用perl而不是ruby?)来搜索和替换你需要的文件配置(可能基于环境变量)。