我一直试图围绕如何利用BitBucket的Pipelines将我的(Laravel)应用程序自动部署到Vultr服务器实例上。
我手动执行以下步骤,我试图自主复制:
commit
我的更改和push
到BitBucket repo ssh root@ipaddress
cd
到正确的目录:cd /var/www/html/app/
pull
:git pull origin master
composer install
,php artisan migrate
等等。exit
我的理解是你可以使用Pipelines自动化这个,这是真的吗?
到目前为止,我已经为管道和我的服务器设置了一个SSH密钥对,因此我的服务器的authorized_keys
文件包含来自BitBucket管道的公钥。
我的管道文件bitbucket-pipelines.yml
如下:
image: atlassian/default-image:latest
pipelines:
default:
- step:
deployment: staging
caches:
- composer
script:
- ssh root@ipaddress
- cd /var/www/html/app/
- git pull origin master
- php artisan down
- composer install --no-dev --prefer-dist
- php artisan cache:clear
- php artisan config:cache
- php artisan route:cache
- php artisan migrate
- php artisan up
- echo 'Deploy finished.'
当管道执行时,我收到错误:bash: cd: /var/www/html/app/: No such file or directory
。
我读到每个脚本步骤都在它自己的容器中运行。
管道中的每个步骤都将启动一个单独的Docker容器 运行脚本中配置的命令
如果在使用SSH登录后在VPS中没有执行cd /var/www/html/app
,我得到的错误是有意义的。
有人可以引导我走向正确的方向吗?
由于
答案 0 :(得分:23)
您在script
下定义的命令将运行到Docker容器中而不是VPS上。
相反,将所有命令放在服务器上的bash文件中。
1 - 在您的VPS上创建一个bash文件pull.sh
,以执行所有部署任务
#/var/www/html
php artisan down
git pull origin master
composer install --no-dev --prefer-dist
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan migrate
php artisan up
echo 'Deploy finished.'
2 - 在您的存储库中创建脚本deploy.sh
,如此
echo "Deploy script started"
cd /var/www/html
sh pull.sh
echo "Deploy script finished execution"
3 - 最后更新您的bitbucket-pipelines.yml
文件
image: atlassian/default-image:latest
pipelines:
default:
- step:
deployment: staging
script:
- cat ./deploy.sh | ssh <user>@<host>
- echo "Deploy step finished"
我建议您已在/var/www/html
的VPS上克隆您的repo并首先手动测试您的pull.sh
文件。
答案 1 :(得分:0)
答案被标记为解决方案的问题是,如果其中任何命令失败,SH进程将不会退出。
例如,该命令php artisan route:cache
很容易失败!更不用说拉力了!
更糟糕的是,如果有任何失败,SH脚本将不停地执行其余命令。
我无法使用任何docker命令,因为在每次操作之后,CI进程都会停止,并且我无法弄清楚如何避免这些命令不退出CI进程。我正在使用SH,但是我将基于上一个命令的退出代码开始添加一些条件,因此我们知道在部署过程中是否出了什么问题。