避免数据库ip,用户并使用docker传入jenkinsfile

时间:2018-12-11 21:58:21

标签: docker jenkins jenkins-pipeline

我有一个使用脚本化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。因此,我认为在一些解决方案中:

  1. 在jenkinsfile中使用操作系统中的环境变量,因此应在jenkins运行的地方创建该变量。
  2. 在Jenkinsfile中创建一个步骤,以询问数据库的端口,主机,用户和密码
  3. 请不要进行任何更改,因为这是指向Jenkinsfile中数据库的一个好习惯

1 个答案:

答案 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/

中描述了更深入的用例