Gitlab CI如何将最新部署到特定目录

时间:2016-06-01 09:30:10

标签: git gitlab gitlab-ci gitlab-ci-runner

我在Gitlab中有两个项目,其中一个是另一个的子模块(让我们称之为repo“frontend-templates”)(让我们称之为repo“main”)。我已经为“frontend-templates”回购设置了一个Gitlab CI构建。问题是我不需要测试或构建。我只需要在所需目录中部署此CI。所以,我为“frontend-templates”项目注册了一个跑步者,并将.gitlab-ci.yml添加到了根目录:

job_main:
   type: deploy
   script: echo "Do nothing"

当我推送到我的存储库时,运行器会将最新的提交提取到以下目录:

/home/gitlab-runner/builds/6231b425/0/Gasimzada/frontend-templates

然后运行echo "Do nothing"

现在,我希望运行器将“已测试”提交部署到开发服务器,该服务器位于:

/var/www/myapp/submodules/frontend-templates

编辑:我将脚本更改为

script: cd /var/www/myapp/submodules/frontend-templates && git pull

但是我收到了一个错误说:

  

无法打开/var/www/myapp/.git/modules/submodules/frontend-templates/FETCH_HEAD:权限被拒绝

这是有道理的,因为gitlab-runner用户无权访问/ var / www / myapp中的任何目录,但这对我来说是一个问题因为我想在部署后运行gulp,所以它在之后编译必要的脚本它从远程存储库中提取。

我是否应该授予dev环境的根目录权限?还是有另一种方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:5)

您可以使用您所在的目录简单地执行某种形式的部署。您可以重命名/删除当前部署的代码的目录并在那里复制结帐代码(rm -rf /var/www/myapp/submodules/frontend-templates && cp -r . /var/www/myapp/submodules/frontend-templates),或者您可以使用{{1进行同步。

但是,这些不是原子操作 - 它们会在执行过程中将部署的代码置于不确定状态,如果失败则会使它们处于混乱状态。我建议您的 / var / www / myapp / submodules / frontend-templates 只是包含代码的目录的符号链接:

rsync

您可以根据提交哈希命名代码目录。工作本身可能看起来像这样:

/var/www/myapp/submodules
  | - 7348110b
  | - a03ed59a
  | - frontend-templates -> ./a03ed59a

注意:显然,跑步者需要必要的文件权限才能执行任务。