我正在使用 jenkins 与 angular cli 进行持续集成,以下是我的步骤:
- 推送到github
- Jenkins 从我的 github 存储库中提取代码,
npm install
然后执行以下操作ng build
到目前为止一切都很好。
我的问题是当我尝试将所有文件复制/var/lib/jenkins/workspace/mywebsite/dist
到/var/www/html/mywebsite
该目录由Nginx管理。
我遇到了这个错误:
cp: cannot create regular file '/var/www/html/mywebsite/./inline.bundle.js': Permission denied
有人能帮我吗 ?
谢谢
答案1
不幸的是,你不能容易地复制数据。为什么不让 NGINX 通过符号链接来获取数据呢?
创建构建目标目录的符号链接/var/www
:
sudo mv /var/www/html /var/www/html.old
sudo ln -s /var/lib/jenkins/workspace/mywebsite/dist /var/www/html
假设 NGINX 也可以读取/var/lib/jenkins/workspace/mywebsite/dist
文件夹中的数据,这样就无需让 Jenkins 直接将内容复制到其控制范围之外的文件夹中。
请注意,我强烈建议您使用/var/www/domain.tld
,替换domain.tld
为您的实际网站,然后使用那站点配置中的文档根目录,nginx
而/var/www/html
不是NGINX 配置陷阱条目介绍了使用默认文档根目录的潜在问题,与此处相关。其中明确指出:
使用默认文档根目录
作为一个易于安装的软件包,Ubuntu、Debian 或其他操作系统中的 NGINX 软件包通常会提供一个“默认”配置文件作为配置方法的示例,并且通常会包含一个文档根目录来保存基本的 HTML 文件。
大多数此类打包系统不会检查文件是否被修改或是否存在于默认文档根目录中,这可能会导致软件包升级时代码丢失。经验丰富的系统管理员都知道,升级期间不可能指望默认文档根目录中的数据保持不变。
您不应将默认文档根目录用于任何站点关键文件。系统不会对默认文档根目录不做任何改动,而且在更新和升级操作系统的 NGINX 软件包时,您的站点关键数据极有可能会丢失。