我目前正在构建一个GitLab CI / CD脚本,用于在服务器上自动部署Web应用程序。将文件复制到服务器的最后一项任务失败。问题在于,所有复制的文件都是根据gitlab-runner:gitlab-runner权限创建的(GitLab-runner作为shell运行程序安装)。但是,我希望为www-data用户更改这些权限。
因此,我已将以下脚本添加到gitlab-ci.yml中
- /bin/chown www-data:www-data /var/www/[NAME]/*
- /usr/bin/find /var/www/[NAME] -type d -exec /bin/chmod 755 {} \;
- /usr/bin/find /var/www/[NAME] -type f -exec /bin/chmod 644 {} \;
- /bin/chmod 660 /var/www/[NAME]/.env
并且,由于我不想在不输入密码的情况下赋予gitlab-runner用户root特权,所以我在sudoers文件中创建了以下条目
gitlab-runner ALL=(ALL:ALL) NOPASSWD: /usr/bin/find /bin/chmod /bin/chown
但是,所有操作都会失败,并显示错误消息,例如:
/bin/chown: changing ownership of '/var/www/[NAME]/app': Operation not permitted
[NAME]文件夹的权限是
drwxrwxr-x www-data www-data
我做错了什么?也许我更改CI / CD脚本中的权限的方法是错误的?但是,如何在不使用www-data用户下运行gitlab-runner的情况下,防止复制的文件属于gitlab-runner用户呢?
我解决了。根据此Change Gitlab CI Runner user,我能够将我的应用程序部署为www-data用户。