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

5

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

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

当我推送到我的代码库时,Runner会将最新的提交内容获取到以下目录:
/home/gitlab-runner/builds/6231b425/0/Gasimzada/frontend-templates

现在,我希望该执行程序将“已测试”的提交部署到位于以下位置的dev服务器中:

并且只运行 echo "什么都不做"

/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个回答

7
您可以使用当前目录执行某种形式的部署。您可以重命名/删除当前部署代码的目录,然后将检出的代码复制到那里 (rm -rf /var/www/myapp/submodules/frontend-templates && cp -r . /var/www/myapp/submodules/frontend-templates),或者您可以使用rsync进行同步。但是,这些操作不是原子操作 - 它们在执行时会使您的已部署代码处于不确定状态,并且如果它们失败,则会留下混乱的代码。我建议您的/ var / www / myapp / submodules / frontend-templates 只是指向包含代码的目录的符号链接:
/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

注意:显然,运行程序需要必要的文件权限来执行任务。


你能帮我吗?关于这个问题:https://dev59.com/75_ha4cB1Zd3GeqP7vfd - Shial

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接