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

Gitlab CI如何将最新版本部署到特定目录,git,gitlab,gitlab-ci,gitlab-ci-runner,Git,Gitlab,Gitlab Ci,Gitlab Ci Runner,我在Gitlab中有两个项目,其中一个是另一个的子模块(我们称之为repo“前端模板”),另一个(我们称之为repo“主”)。我已经为“前端模板”repo建立了Gitlab CI构建。问题是我不需要测试或构建。我只需要在需要的目录中部署此CI。因此,我为“前端模板”项目注册了一个运行程序,并将.gitlab-ci.yml添加到根目录: job_main: type: deploy script: echo "Do nothing" /home/gitlab-runner/build

我在Gitlab中有两个项目,其中一个是另一个的子模块(我们称之为repo“前端模板”),另一个(我们称之为repo“主”)。我已经为“前端模板”repo建立了Gitlab CI构建。问题是我不需要测试或构建。我只需要在需要的目录中部署此CI。因此,我为“前端模板”项目注册了一个运行程序,并将.gitlab-ci.yml添加到根目录:

job_main:
   type: deploy
   script: echo "Do nothing"
/home/gitlab-runner/builds/6231b425/0/Gasimzada/frontend-templates
当我推送到我的存储库时,运行程序会将最新提交获取到以下目录:

job_main:
   type: deploy
   script: echo "Do nothing"
/home/gitlab-runner/builds/6231b425/0/Gasimzada/frontend-templates
只需运行
echo“什么都不做”

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

/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环境的根目录权限吗?或者有其他方法可以做到这一点吗?

您只需使用所在目录执行某种形式的部署即可。您可以重命名/删除当前部署代码的目录,并在那里复制签出代码(
rm-rf/var/www/myapp/submodules/frontend templates&&cp-r./var/www/myapp/submodules/frontend templates
),或者您可以使用
rsync
执行同步

然而,这些不是原子操作——它们将使您部署的代码在执行时处于不确定状态,如果失败,则会陷入混乱。我建议您的/var/www/myapp/submodules/frontend模板只是指向包含以下代码的目录的符号链接:

/var/www/myapp/submodules
  | - 7348110b
  | - a03ed59a
  | - frontend-templates -> ./a03ed59a
您可以根据提交散列来命名代码目录。然后,作业本身可能看起来像这样:

job_main:
   type: deploy
   script:
     - cp -r . /var/www/myapp/submodules/$CI_BUILD_REF
     - ln -s ./$CI_BUILD_REF /var/www/myapp/submodules/templink
     - mv -Tf /var/www/myapp/submodules/templink /var/www/myapp/submodules/frontend-templates
注意:显然,跑步者需要必要的文件权限才能执行任务。

您能帮我吗?用这个?