Jenkins 与 Docker 的宿主机映射详解

Jenkins 是一个开源的持续集成和持续交付(CI/CD)工具,广泛应用于软件开发中。随着容器化技术的发展,Docker 成为构建、测试和部署应用程序的重要工具。通过将 Jenkins 与 Docker 相结合,开发团队可以实现自动化构建和部署流程。在这篇文章中,我们将探讨如何在 Jenkins 中使用 Docker 进行宿主机映射,以及提供具体的代码示例。

什么是宿主机映射?

宿主机映射允许 Docker 容器访问宿主机的文件系统。这对于需要持久存储构建产物或者需要访问宿主机资源的工作流特别有用。在 Jenkins 中,这意味着我们可以配置 Jenkins 以在构建过程中使用宿主机的目录。

流程图

在进行 Jekins 与 Docker 宿主机映射之前,我们首先要了解整个流程。以下是我们整个工作流的流程图:

flowchart TD
    A[开始] --> B[安装 Docker]
    B --> C[安装 Jenkins]
    C --> D[配置 Jenkins]
    D --> E[创建 Pipeline]
    E --> F[构建和映射]
    F --> G[结束]

安装 Docker

首先,你需要在你的宿主机上安装 Docker。你可以根据你的操作系统参考下面的命令:

在 Ubuntu 上安装 Docker

sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

在 CentOS 上安装 Docker

sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker

安装 Jenkins

在安装完 Docker 之后,我们接下来就可以在 Docker 中安装 Jenkins。可以通过以下命令来运行 Jenkins 的 Docker 容器:

sudo docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

该命令中:

  • -d:表示将容器放入后台执行。
  • -p 8080:8080:将宿主机的 8080 端口映射到容器内部的 8080 端口。
  • -v jenkins_home:/var/jenkins_home:将 Jenkins 的家目录映射到宿主机。

配置 Jenkins

当 Jenkins 在 Docker 中运行时,你可以通过浏览器访问 http://<宿主机IP>:8080 来打开 Jenkins 的网页界面。第一次访问时会要求输入初始化密码,该密码可以通过以下命令获取:

sudo docker exec -it $(sudo docker ps -q -f "ancestor=jenkins/jenkins:lts") cat /var/jenkins_home/secrets/initialAdminPassword

在网页界面,根据提示安装推荐的插件,并创建一个管理员用户。

创建 Pipeline

完成 Jenkins 的基本配置后,我们需要创建一个新的 Pipeline。在你的 Jenkins 控制台中,点击“新建任务”,然后选择“Pipeline”类型。

在 Pipeline 脚本中,你可以使用 Docker 的 docker 命令来创建映射。例如,下面的示例展示了如何在 Jenkins Pipeline 中使用 Docker 构建和映射。

Jenkinsfile 示例

pipeline {
    agent {
        docker {
            image 'node:14'
            args '-v /宿主机路径:/容器路径'
        }
    }
    
    stages {
        stage('Build') {
            steps {
                sh 'npm install'
            }
        }

        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
    }
}

在这个示例中,我们使用了 Node.js 的 Docker 镜像,在宿主机的路径(例如,/home/user/myproject)和容器内部的路径(例如,/usr/src/app)之间建立映射。通过这个映射,构建生成的文件将被保留在宿主机的文件系统中。

运行 Pipeline

一旦你完成了 Jenkinsfile 的编写,可以在 Jenkins 中立即运行该 Pipeline。单击“立即构建”,然后查看控制台输出,验证构建和测试是否成功。

监控进度

为了更好地理解项目的进度管理,我们可以使用 Gantt 图来展示这个过程。以下是一个基于上述工作流的 Gantt 图示例:

gantt
    title 流程图
    dateFormat  YYYY-MM-DD
    section 安装阶段
    安装 Docker              :done,  des1, 2023-01-01, 2023-01-02
    安装 Jenkins             :done,  des2, 2023-01-03, 1d
    section 配置阶段
    配置 Jenkins             :active,  des3, 2023-01-04, 1d
    创建 Pipeline            :done,  des4, after des3, 1d
    section 执行阶段
    运行 Pipeline            :done,  des5, after des4, 1d

结论

通过将 Jenkins 和 Docker 合并使用,开发团队能够实现灵活性和高效性,使持续集成和部署的过程更为流畅。通过宿主机映射,构建产物可以方便地保存在宿主机中,便于后续的查阅和使用。随着容器技术的不断发展,掌握这类集成工具的使用将是每位开发者的必备技能。

希望通过本文的解释和示例代码,您能更清楚地了解 Jenkins 和 Docker 的宿主机映射过程,并能在自己的项目中成功实现这一功能!