如何使用 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:
我在 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: