带有变量的 Gitlab CI 复制文件

标签 gitlab gitlab-ci

我有一个 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_USERNAMEDB_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/

相关文章:

gitlab - 当我将执行器设置为 shell 时,为什么 gitlab-runner 作为 ruby​​ docker 运行执行?

gitlab - 如何获取某个 CI_PIPELINE_IID 的 GitLab 管道?

docker - 如何将dockerfile添加到部署到gitlab的jekyll中

spring-boot - gitlab ci-工件应用程序jar中的差异

docker - 如何使用gitlab ci测试和部署我的php应用程序?

docker - 带有gitlab的Docker Windows 10

docker - Gitlab CI 与 docker-compose

git - 自动将 git 存储库的部分内容推送到谷歌云存储桶

git - Gitlab CE 的高内存使用率

gitlab - 如何仅运行 Gitlab-CI 管道分支和标签?