gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:31:55 25 4
gpt4 key购买 nike

我在 Gitlab 中有两个项目,其中一个是另一个的子模块(让我们称之为 repo“frontend-templates”)(让我们称之为 repo“main”)。我已经为“前端模板” repo 建立了一个 Gitlab CI 构建。问题是我不需要测试或构建。我只需要在需要的目录中为此 CI 进行部署。因此,我为“前端模板”项目注册了一个运行程序,并将 .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

但我收到一条错误消息:

cannot open /var/www/myapp/.git/modules/submodules/frontend-templates/FETCH_HEAD: Permission denied

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

开发环境的根目录要不要给权限?或者还有其他方法吗?

最佳答案

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

但是,这些不是原子操作 - 它们会使您部署的代码在执行时处于不确定状态,如果失败则一团糟。我建议您的 /var/www/myapp/submodules/frontend-templates 只是指向包含代码的目录的符号链接(symbolic link):

/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

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

关于Gitlab CI如何将最新部署到特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com