当前位置: 首页 > 知识库问答 >
问题:

使用BitBucket管道通过SSH访问部署到VPS

谢叶五
2023-03-14

我一直在努力研究如何利用BitBucket的Pipelines将我的(Laravel)应用程序自动部署到Vultr Server实例上。

我手动执行以下步骤,我正在尝试自主复制:

  • 提交我的更改并推送到比特桶回购
  • 我使用终端登录我的服务器:ssh root@ipaddress
  • CD 到正确的目录: cd /瓦/万维/网页/应用程序/
  • 然后我从我的 BitBucket 存储库中提取git 拉取源主站
  • 然后我运行一些命令:作曲家安装php工匠迁移等。
  • 然后我注销:退出

我的理解是,你可以使用管道来实现自动化,这是真的吗?

到目前为止,我已经为管道和服务器设置了一个SSH密钥对,因此我的服务器的authorized_keys文件包含来自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/:没有这样的文件或目录

我了解到每个脚本步骤都在它自己的容器中运行。

管道中的每一步都将启动一个单独的Docker容器来运行脚本中配置的命令

我得到的错误是有道理的,如果它没有在VPS中执行cd / var / www / html / 应用程序,使用SSH登录它。

有人能指引我正确的方向吗?

谢啦

共有2个答案

董子平
2023-03-14

标记为解决方案的答案的问题是,如果其中的任何命令失败,SH进程都不会退出。

例如,这个命令php-artian-route:cache很容易失败!更不用说拉了!

更糟糕的是,如果出现任何失败,SH脚本将不停地执行其余命令。

我不能使用任何 docker 命令,因为每次执行后,CI 进程都会停止,我无法弄清楚如何避免这些命令不退出 CI 进程。我正在使用 SH,但我会开始根据上一个命令的退出代码添加一些条件,以便我们知道在部署过程中是否有任何错误。

公孙茂学
2023-03-14

您在脚本下定义的命令将运行到 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管道。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上克隆您的存储库,并首先手动测试您的 pull.sh 文件。

 类似资料:
  • 我们已经建立了管道脚本,工作得很好。最近,我们决定使用bitbucket管道自动部署到elastic beanstalk,并遵循使用命令进行部署的教程。显然,此命令在管道上失败。配置文件似乎是合法的,因为它在本地运行。它还可以在管道文件中指定的同一图像的容器中运行,也可以从本地使用docker exec在同一图像的容器中运行命令。下面是管道文件和我们使用命令得到的错误。我显然漏掉了什么。如有任何帮

  • 问题内容: 我无法让Jenkins通过SSH在BitBucket上克隆git存储库。出现以下消息失败: 采取的步骤 创建一个SSH密钥对 将公共密钥添加为BitBucket上存储库的部署密钥 在Jenkins Credentials Manager插件中安装SSH密钥和用户名(尝试过’git’和我的BB帐户名) 尝试使用URL的形式在构建中克隆存储库 我也尝试过不使用凭据管理器并手动将密钥安装在中

  • 我试图编写一个YAML管道脚本,使用ssh密钥将已从bitbucket存储库更改的文件部署到远程服务器。我现在的文档是从bitbucket本身复制的,有错误: 配置错误 bitbucket-pipelines.yml在[pipelines>默认>0>步骤>脚本>1]处出现错误。准确地说:缺少命令字符串或命令字符串为空。此列表中的每个项应该是单个命令字符串或定义管道调用的映射。 我的ssh公钥和私钥

  • 我正在使用Maven将WAR文件部署到AWS。我计划使用'MVN Deploy',这将把war文件ssh到AWS。我关注http://maven.apache.org/plugins/maven-deploy-plugin/examples/deploy-ssh-external.html。 这是我的POM文件 但是当我运行mvn clean deploy时,我收到了这个… 提前谢了。

  • 我试图通过jenkins管道将azure web应用程序部署到azure form git 代码如下所示 这怎么可能?有什么方法可以将git repo url作为参数提供给azure插件吗? 谢了!

  • 我使用托管Gitlab来托管我的Git存储库,最近我使用它来构建/部署PHP和Java应用程序到服务器。 我想做的是,一旦构建完成,使用SSH部署应用程序。有时,这可能只是通过SSH将最终构建的内容(PHP文件)上载到服务器,或者有时它可能是上载已编译的文件。jar文件,然后在远程服务器上执行命令以重新启动服务。 我已经将我自己的Docker容器设置为构建环境,这包括Java、PHP、Compos