如何使用GitlabCI导出远程主机上的环境变量

时间:2019-06-19 21:07:09

标签: laravel deployment gitlab-ci devops

我正在使用GitlabCI部署我的Laravel应用程序。 我想知道如何管理.env文件。据我了解,我只需要将.env.example置于版本控制下,而不是具有真实值的那个。

我已经在Gitlab Settings -> CI/CD -> Environment Variables中设置了我的应用程序所需的所有密钥,并且可以在运行程序中使用它们,例如,检索SSH私钥以连接到远程主机,但是我应该如何部署这些密钥?变量以及远程主机?我应该在运行时生成的.env文件中用bash编写它们,然后将其复制吗?我应该通过远程主机上的ssh导出它们吗?哪个是正确的管理方式?

1 个答案:

答案 0 :(得分:1)

如果您打开另一个解决方案,我建议使用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产品部署:password =“ 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私钥。

希望我不会错过任何一步。