使用CircleCI自动部署Docker应用

125次阅读
没有评论

问题描述

已经在circle.yml文件和他的CircleCI账号中设置了使用Docker进行测试,但他想在成功构建后转移到持续部署阶段。以下是他在circle.yml中的配置:

machine:
  services:
    - docker
dependencies:
  override:
    - docker info
    - docker build -t pgeiss/appname .
test:
  override:
    - docker run -d -p 8080:8080 pgeiss/appname; sleep 10
    - curl --retry 10 --retry-delay 5 -v http://localhost:8080/res.json

解决方案

以下解决方案基于提供的问答数据和知识库,确保在执行操作前备份重要数据。

步骤1:添加部署配置

首先,您需要在circle.yml文件中添加一个deployment部分,用于配置持续部署。请按照以下步骤进行操作:

  1. 打开您的项目中的circle.yml文件。
  2. 在文件的底部,添加以下内容:
deployment:
  main:  # 或者您的部署名称
    branch: master  # 或者您想要部署的分支
    commands:
      - docker login -e (您的邮箱) -u (您的用户名) -p (您的密码)
      - docker push pgeiss/appname
      - ./start.sh

请将(您的邮箱)(您的用户名)(您的密码)替换为您的Docker Hub凭证。

步骤2:编写部署脚本

现在,您需要编写一个部署脚本,该脚本将在构建成功后执行部署操作。按照以下步骤进行操作:

  1. 创建一个名为start.sh的文件,并将其放置在您的项目根目录中。
  2. 将以下内容添加到start.sh文件中:
#!/usr/bin/env bash
echo "stopping running application"
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker stop dodsv'
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker rm dodsv'
echo "pulling latest version of the code"
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker pull pgeiss/appname-webapp:latest'
echo "starting the new version"
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker run -d --restart=always --name dodsv -p 80:5432 pgeiss/appname:latest'
echo "success!"
exit 0

在上面的脚本中,您需要将(您的DEPLOY_USER)(您的DEPLOY_HOST)替换为您的部署服务器的用户名和主机名。此脚本将执行以下操作:
– 停止运行中的应用程序容器
– 删除容器
– 拉取最新版本的代码
– 启动新版本的应用程序容器

请确保在circle.ymldeployment部分中配置了适当的环境变量,以便在脚本中使用。

步骤3:配置权限和环境变量

为了使脚本正常工作,您需要确保start.sh脚本具有执行权限,并且在CircleCI中配置了必要的环境变量和SSH密钥。

  1. 在命令行中运行以下命令,为start.sh脚本添加执行权限:
chmod +x start.sh
  1. 在CircleCI的项目设置中,配置以下环境变量:
  2. DEPLOY_USER: 您的部署服务器用户名
  3. DEPLOY_HOST: 您的部署服务器主机名

如果使用SSH密钥进行身份验证,请确保在CircleCI中添加了相应的SSH密钥。

完成了以上步骤后,CircleCI将在构建成功后执行部署操作,使用编写的部署脚本。这将确保您的应用程序得到持续部署。

提示:上述解决方案可能会因环境、版本等因素而有所不同。在执行部署操作之前,请确保已经做好充分备份,并在测试环境中进行验证。

参考链接

感谢这篇博文提供了部分脚本示例。

正文完