Как изменить переменные для разработки и производства - PullRequest
1 голос
/ 16 апреля 2019

подключаю базу:

import { Pool } from 'pg';
import config from './../config';

export default new Pool({
    connectionString: config.db_prod.connectionString,
    ssl: true,
});

Мой файл конфигурации:

export default {
    db_dev: {
        connectionString: 'postgres://sfp...',
    },
    db_prod: {
        connectionString: 'postgres://woy...',
    },
...
}

Мой .gitlab-ci.yml файл:

image: node:latest

stages:
  - production
  - development

cache:
    paths:
      - node_modules/

production:
  type: deploy
  stage: production
  image: ruby:latest
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=deploy-node-aspp-with-gitlab --api-key=$HEROKU_PRODUCTION_API_KEY
  artifacts:
    paths:
      - node_modules/
  only:
    - master

development:
  type: deploy
  stage: development
  image: ruby:latest
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=deploy-node-aspp-with-gitlab-d --api-key=$HEROKU_STAGING_API_KEY
  artifacts:
    paths:
      - node_modules/
  only:
    - dev

Мой package.json файл:

{
...
  "main": "index.js",
  "scripts": {
    "start": "nodemon --exec babel-node src/index.js"
  },
  "devDependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@babel/node": "^7.2.2",
    "@babel/preset-env": "^7.3.1",
    "chai": "^4.2.0",
    "chai-http": "^4.2.1",
    "faker": "^4.1.0",
    "mocha": "^6.1.3",
    "nodemon": "^1.18.10"
  },
  "dependencies": {
    "aws-sdk": "^2.398.0",
    "bcrypt": "^3.0.3",
    "body-parser": "^1.18.3",
    "cron": "^1.7.0",
    "express": "^4.16.4",
    "express-validator": "^5.3.1",
    "firebase-admin": "^7.2.0",
    "generate-password": "^1.4.1",
    "handlebars": "^4.1.2",
    "jsonwebtoken": "^8.4.0",
    "moment": "^2.24.0",
    "morgan": "^1.9.1",
    "multer": "^1.4.1",
    "node-gcm": "^1.0.2",
    "nodemailer": "^6.1.0",
    "pg": "^7.8.0",
    "uuid": "^3.3.2"
  }
}

Мне нужно, когда я загружаю в хранилище в ветке dev, чтобы строка соединения была db_dev, когда я загружаю в хранилище в ветке master, чтобы строка соединения была db_prod.

Мне не мне вручную с db_dev на db_prod и обратно.

Как мне это реализовать?

1 Ответ

2 голосов
/ 17 апреля 2019

Возможно, есть другие решения, но это мое решение.

  • Используйте environment variable для переключения строк подключения - имя переменной: DB_CONNECTION_STRING

  • Используйте Heroku platform-api для обновления Config Vars: обновите DB_CONNECTION_STRING значение.

Сначала отредактируйте код, чтобы динамически выбирать строку БД:

import { Pool } from 'pg';
import config from './../config';

export default new Pool({
    connectionString: config[process.env.DB_CONNECTION_STRING || "db_dev"].connectionString,
    ssl: true,
});

Далее обновите файл .gitlab-ci.yml.Мы должны обновить Heroku Config Vars через http api:

image: node:latest

stages:
  - production
  - development

cache:
    paths:
      - node_modules/

production:
  type: deploy
  stage: production
  image: ruby:latest
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - >-
      curl -X PATCH https://api.heroku.com/apps/deploy-node-aspp-with-gitlab/config-vars -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer $HEROKU_PRODUCTION_API_KEY" -H "Content-Type: application/json" -d "{'DB_CONNECTION_STRING': 'db_prod'}"
    - dpl --provider=heroku --app=deploy-node-aspp-with-gitlab --api-key=$HEROKU_PRODUCTION_API_KEY
  artifacts:
    paths:
      - node_modules/
  only:
    - master

development:
  type: deploy
  stage: development
  image: ruby:latest
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - >-
      curl -X PATCH https://api.heroku.com/apps/deploy-node-aspp-with-gitlab/config-vars -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer $HEROKU_STAGING_API_KEY" -H "Content-Type: application/json" -d "{'DB_CONNECTION_STRING': 'db_dev'}"
    - dpl --provider=heroku --app=deploy-node-aspp-with-gitlab-d --api-key=$HEROKU_STAGING_API_KEY
  artifacts:
    paths:
      - node_modules/
  only:
    - dev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...