Как экспортировать переменную среды на удаленный хост с помощью GitlabCI - PullRequest
0 голосов
/ 20 июня 2019

Я использую GitlabCI для развертывания моих приложений Laravel.Мне интересно, как мне управлять файлом .env.Насколько я понял, мне просто нужно поставить .env.example под контроль версий, а не тот, который имеет реальные значения.

Я установил все ключи, которые нужны моему приложению, внутри Gitlab Settings -> CI/CD -> Environment Variables иЯ могу использовать их на бегуне, например, чтобы получить закрытый ключ SSH для подключения к удаленному хосту, но как мне также развернуть эти переменные на удаленном хосте?Должен ли я написать их с помощью bash в "* генерируемом во время выполнения" файле .env, а затем скопировать его?Должен ли я экспортировать их через ssh на удаленном хосте?Какой правильный способ справиться с этим?

1 Ответ

1 голос
/ 26 июня 2019

Если вы открываете другое решение, которое я предлагаю использовать fabric (fabfile), я приведу вам пример:создайте .env.default с переменной типа:

DB_CONNECTION=mysql
DB_HOST=%(HOST)s
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=%(USER)s
DB_PASSWORD=%(PASSWORD)s

После установки фабрики добавьте fabfile в каталог вашего проекта:

from fabric.api import env , run , put


prod_env = {
  'name' : 'prod' ,
  'user' : 'user_ssh',
  'deploy_to' : '/path_to_project',
  'hosts' : ['ip_server'],
}

def set_config(env_config):
  for key in env_config:
     env[key] = env_config[key]

def prod():
  set_config(prod_env)


def deploy(password,host,user):
  run("cd %s && git pull -r",env.deploy_to)
  process_template(".env.default",".env" , { 'PASSWORD' : password , 'HOST' : host,'USER': user } )
  put( ".env" , "/path_to_projet/.env" )


def process_template(template , output , context ):
  import os
  basename = os.path.basename(template)
  output = open(output, "w+b")
  text = None

  with open(template) as inputfile:
    text = inputfile.read()

  if context:
    text = text % context
  #print " processed \n : %s" % text
  output.write(text)
  output.close()

Теперь вы можете запустить локальный тестовый скрипт:

fab prod deploy: пароль = "pass", user = "user", host = "host"

Он развернет проект на вашем сервере и проверит, обрабатывает ли он .env

Если работает сейчас настало время для gitlab ci, это пример файла:

image: python:2.7
before_script:
  - pip install 'fabric<2.0'
  # Setup SSH deploy keys
  - 'which ssh-agent || ( apt-get install -qq openssh-client )'
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

deploy_staging:
  type: deploy
  script:
     - fab prod deploy:password="$PASSWORD",user="$USER",host="$HOST"
 only:
     - master

$ SSH_PRIVATE_KEY, $ PASSWORD, $ USER, $ HOST - переменная средыgitlab, вы должны добавить закрытый ключ $ SSH_PRIVATE_KEY, который имеет доступ к серверу.

Надеюсь, я не пропущу ни шагу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...