我有一个 django
存储库在 gitlab
服务。我在 VDS 中使用了 gitlab CI runner。我想在部署过程中复制一些文件,例如 local_settings.py
并仅在部署时填充变量,例如:
# $CI_PROJECT_NAME/$CI_PROJECT_NAME/deploy_templates/local_settings.py.tpl
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'dbname',
'USERNAME': '$DB_USERNAME',
'PASSWORD': '$DB_PASSWORD',
},
}
# .gitlab-ci.yml
configure_project:
script:
- git clone $CI_BUILD_REPO
- cp $CI_PROJECT_NAME/$CI_PROJECT_NAME/deploy_templates/local_settings.py.tpl $CI_PROJECT_NAME/$CI_PROJECT_NAME/local_settings.py
在我的项目中,我定义了
DB_USERNAME
和 DB_PASSWORD
安全变量。我怎样才能获得带有值的文件?我需要类似 template
的东西指令来自 ansible
最佳答案
这可以使用 envsubst
来实现命令。在您的 .gitlab-ci.yml
文件,您可以执行以下操作:
configure_project:
script:
- git clone $CI_BUILD_REPO
- envsubst < "$CI_PROJECT_NAME/$CI_PROJECT_NAME/deploy_templates/local_settings.py.tpl" > "local_settings.py.tpl.exported"
- cp local_settings.py.tpl.exported $CI_PROJECT_NAME/$CI_PROJECT_NAME/local_settings.py
envsubst
将替换环境变量的值,输出可以重定向到另一个名为 local_settings.py.tpl.exported
的文件。你可以复制。
关于带有变量的 Gitlab CI 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39256513/