我有一个使用脚本化sintax的Jenkinsfile,在最后一步(部署)中,我只是执行了“ docker run”(将来我将迁移到ansible)。
我的docker映像需要通过环境变量指向数据库,所以我正在使用它:
docker run -d --env DATABASE_EASYREC_HOST="somehost.com.br" \
--env DATABASE_EASYREC_PORT="5432" \
--env DATABASE_EASYREC_NAME="easyrec_stage" \
--env DATABASE_EASYREC_USER="postgres" \
--env DATABASE_EASYREC_PASS="Ronaldo1986" \
-p 8080:8080 --rm --name easyrecadm-stage namespace/myimage:prod
如您所见,我正在使用 somehost.com.br 来定位我的数据库,但是我猜这不是在Jenkinsfile中直接设置IP,Port,User和Pass的好习惯,因为如果将来数据库更改为另一台机器,我需要更改我的Jenkinsfile。因此,我认为在一些解决方案中:
答案 0 :(得分:1)
您可以使用托管文件(1),自定义文件提供程序插件(2)和管道实用程序步骤插件(3)
将托管文件作为database.json,ID为“ database”
{"DATABASE_EASYREC_HOST": "somehost.com.br"}
此代码将读取适当的自定义配置:
def DB_HOST
configFileProvider(
[configFile(fileId: 'database', targetLocation: 'database.json')]) {
def db = readJSON file: 'database.json'
DB_HOST = db.DATABASE_EASYREC_HOST ?: 'default_value'
}
sh 'docker ...'
(1)https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin#ConfigFileProviderPlugin-FileTypes (2)https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin#ConfigFileProviderPlugin-UsingtheconfigurationfilesinJenkinsPipelines (3)https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readjson-read-json-from-files-in-the-workspace
https://www.linkedin.com/pulse/jenkins-shared-pipeline-libraries-custom-runtime-delgado-garrido/
中描述了更深入的用例