0Pricing
Docker & DevOps Fundamentals · 课时

使用 Jenkins 自动部署

在 Jenkins 中创建 CI/CD pipeline,将 Docker 容器部署到目标环境

使用 Jenkins 自动部署 是 CoddyKit 上的免费 Docker & DevOps Fundamentals 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & DevOps Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & DevOps Fundamentals 课程共包含 4 节课。

自动化部署简介

欢迎学习 Jenkins 和 Docker 的 CI/CD 最后一课!今天,我们将重点介绍如何自动化部署 Docker 容器。

自动化部署是指无需人工干预,将软件发布到生产环境或预发布环境的过程。它是持续交付和持续部署的关键部分,可以确保速度、一致性和可靠性。

使用 Jenkins 自动部署 — 插图 1

为什么要自动化部署

手动部署应用可能速度缓慢、容易出错,而且缺乏一致性。自动化可以解决这些问题:

  • 速度:快速部署新功能或修复内容。
  • 可靠性:通过标准化流程减少人为错误。
  • 一致性:确保每次部署都遵循相同的步骤。
  • 效率:让开发人员专注于编写代码,而不是部署任务。

部署流水线阶段

典型的 Jenkins Docker 部署流水线包含几个关键阶段:

  • 构建:构建 Docker 镜像(已在前面的课程中介绍)。
  • 测试:针对镜像运行自动化测试。
  • 推送:将镜像推送到 Docker 镜像仓库。
  • 部署:从镜像仓库拉取镜像,并在目标服务器上运行它。
  • 验证:确认新的部署运行正常。

今天我们将重点介绍“部署”和“验证”阶段。

设置目标环境

Jenkins 执行部署前,目标服务器需要准备就绪。这通常意味着:

  • 已安装 Docker:目标服务器必须安装 Docker Engine。
  • SSH 访问:Jenkins 需要通过安全 Shell(SSH)访问目标服务器。
  • 用户权限:SSH 用户需要具备运行 Docker 命令的权限。

我们通常会在 Jenkins 中安全地管理 SSH 凭据。

用于 SSH 的 Jenkins 凭据

要连接远程服务器,Jenkins 会使用 SSH 凭据。这些凭据通常是以用户名和私钥对的形式存储在 Jenkins 凭据管理器中,并受到安全保护。

定义流水线时,您可以告诉 Jenkins 在特定阶段使用这些凭据,从而允许它在目标服务器上执行命令。

基本部署脚本示例

下面是一个简单的 Shell 脚本示例,它可以在目标服务器上执行,以更新 Docker 容器。该脚本会停止旧容器、删除它、拉取新镜像,然后运行新容器。

APP_NAME 和 IMAGE_NAME 将作为环境变量传入。

#!/bin/bash

# Stop and remove existing container
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true

# Pull the new Docker image
docker pull ${IMAGE_NAME}

# Run the new container
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}

echo "Deployment of ${APP_NAME} complete!"

集成 Jenkins 流水线

在 Jenkinsfile 中,您可以使用 sshPublisher 插件,或使用带 SSH 代理转发功能的简单 sh 步骤,在远程主机上执行命令。假设 SSH 已配置好,下面是使用基本 sh 步骤的部署阶段示例。

agent { label 'remote-deploy-host' } 表示此阶段将在目标服务器上运行。

stage('Deploy to Production') {
  agent { label 'remote-deploy-host' } 
  steps {
    withEnv([
      "APP_NAME=my-webapp",
      "IMAGE_NAME=myregistry/my-webapp:latest"
    ]) {
      sh '''
        docker stop ${APP_NAME} || true
        docker rm ${APP_NAME} || true
        docker pull ${IMAGE_NAME}
        docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
        echo "Deployment successful!"
      '''
    }
  }
}

实现滚动更新

要实现零停机部署,仅简单地停止并重新启动是不够的。通常可以采用以下策略:

  • 滚动更新:逐个用新容器替换旧容器,同时确保服务可用。
  • 蓝绿部署:将新版本(绿色)与旧版本(蓝色)并行部署,然后切换流量。

虽然 Jenkins 可以编排这些操作,但 Docker Swarm 或 Kubernetes 等工具原生支持更高级的策略。

验证部署

部署完成后,务必验证应用是否正常运行。这可能包括:

  • 健康检查:向应用的健康检查端点发送简单的 HTTP GET 请求。
  • 日志监控:检查容器日志中是否有错误。
  • 集成测试:针对新部署的版本运行一组快速测试。

您的 Jenkins 流水线可以包含“验证”阶段,以自动执行这些检查。

检验您的知识

请思考下面部署阶段的 Jenkinsfile 代码片段。docker stop ${APP_NAME} || true 的主要作用是什么?

回顾:自动化部署

做得很好!您已经学习了如何使用 Jenkins 和 Docker 实现自动化部署。

  • 自动化部署可以确保发布快速、可靠且一致。
  • 目标环境需要 Docker 和 SSH 访问权限。
  • Jenkins 使用安全凭据连接远程服务器。
  • 部署脚本通常会停止旧容器、拉取新镜像并启动新容器。
  • 验证步骤对于确认部署成功至关重要。

至此,Jenkins 和 Docker 的 CI/CD 课程就结束了。请继续练习,以熟练掌握这些强大的工具!

常见问题解答

「使用 Jenkins 自动部署」课时是免费的吗?

是的 — 「使用 Jenkins 自动部署」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。

「使用 Jenkins 自动部署」这节课中我会学到什么?

在 Jenkins 中创建 CI/CD pipeline,将 Docker 容器部署到目标环境 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Docker & DevOps Fundamentals 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Docker & DevOps Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 Jenkins 自动部署」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Docker & DevOps Fundamentals 课中编写并运行代码吗?

能。每节 Docker & DevOps Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Jenkins 简介
  2. 使用 Jenkins 构建 Docker 镜像
  3. 使用 Jenkins 自动部署
  4. 使用 Jenkinsfile 将 Jenkins Pipeline 定义为代码
← 返回 Docker & DevOps Fundamentals