如何使用 Bitbucket Pipelines 将 dockerized Node 应用程序部署到 DigitalOcean 服务器?

How can I deploy a dockerized Node app to a DigitalOcean server using Bitbucket Pipelines?

我在 Bitbucket 存储库中有一个 NodeJS 项目,我正在努力了解如何使用 Bitbucket Pipelines 将它从那里获取到我的 DigitalOcean 服务器上,在那里它可以在网络上提供服务。

到目前为止我得到了这个

image: node:10.15.3

pipelines:
  default:
    - parallel:
        - step:
            name: Build
            caches:
              - node
            script:
              - npm run build

现在应用程序已构建,应该作为单个文件 server.js 保存在理论上的 /dist 目录中。

我现在如何将此文件 dockerize 化,然后将其上传到我的 DigitalOcean? 我找不到这样的例子。

我确实在 Bitbucket Pipelines 编辑器中找到了一个 Docker 模板,但它只是在某种程度上描述了创建 Docker 图像,根本没有描述如何将它实际部署到 DigitalOcean 服务器(或任何地方)

  - step:
      name: Build and Test
      script:
        - IMAGE_NAME=$BITBUCKET_REPO_SLUG
        - docker build . --file Dockerfile --tag ${IMAGE_NAME}
        - docker save ${IMAGE_NAME} --output "${IMAGE_NAME}.tar"
      services:
        - docker
      caches:
        - docker
      artifacts:
        - "*.tar"
  - step:
      name: Deploy to Production
      deployment: Production
      script:
        - echo ${DOCKERHUB_PASSWORD} | docker login --username "$DOCKERHUB_USERNAME" --password-stdin
        - IMAGE_NAME=$BITBUCKET_REPO_SLUG
        - docker load --input "${IMAGE_NAME}.tar"
        - VERSION="prod-0.1.${BITBUCKET_BUILD_NUMBER}"
        - IMAGE=${DOCKERHUB_NAMESPACE}/${IMAGE_NAME}
        - docker tag "${IMAGE_NAME}" "${IMAGE}:${VERSION}"
        - docker push "${IMAGE}:${VERSION}"
      services:
        - docker

您必须通过 SSH 连接到您的 DigitalOcean VPS,然后在那里执行一些步骤:

  • 拉取当前代码
  • 构建 docker 文件
  • 部署 docker 文件

示例可能如下所示:

在您的存储库根目录中创建一些类似“deployment.sh”的脚本:

cd <path_to_local_repo>
git pull origin master
docker container stop <container_name>
docker container rm <container_name>
docker image build -t <image_name> .
docker container run -itd --name <container_name> <image_name>

然后将以下内容添加到您的管道中:

# ...
    - step:
        deployment: staging
        script:
          - cat ./deployment.sh | ssh <ssh_user>@<ssh_host>

不过,您必须在服务器上为存储库添加 ssh 密钥。查看以下 link,了解如何执行此操作:https://confluence.atlassian.com/display/BITTEMP/Use+SSH+keys+in+Bitbucket+Pipelines

这是一个类似的问题,但使用 PHP: