我在 Gitlab 中有两个项目,其中一个是另一个项目(我们称这个存储库为“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
部署后,因此它在从远程存储库拉取后编译必要的脚本。
我应该给开发环境根目录权限吗?或者还有其他方法可以做到这一点吗?
您可以使用您所在的目录简单地执行某种形式的部署。您可以重命名/删除当前部署代码的目录并将签出代码复制到那里(rm -rf /var/www/myapp/submodules/frontend-templates && cp -r . /var/www/myapp/submodules/frontend-templates
)或者你可以使用rsync
进行同步。
然而,这些不是原子操作 - 它们将使您部署的代码在执行时处于不确定状态,如果失败则会造成混乱。我建议你的/var/www/myapp/子模块/前端模板只是一个指向包含代码的目录的符号链接:
/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
注意:显然,运行者需要必要的文件权限才能执行任务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)