将 Docker 与 Jenkins 集成可以实现持续集成和持续交付 (CI/CD) 流程的自动化,提高开发效率和软件质量。以下是详细的集成步骤:
1. 安装 Docker 和 Jenkins
- Docker 安装: 请根据您的操作系统选择合适的安装方法,并确保 Docker 守护进程正在运行。具体过程可以参考我的博文《【DevOps】Docker安装和使用示例》
- Jenkins 安装: 可以选择 war 包方式或使用 Docker 安装 Jenkins。具体可以参考我的博文《DevOps(四)在Ubuntu20.04和CentOS7安装Jenkins》
2. 在 Jenkins 中安装 Docker 插件
- 进入 Jenkins 管理界面,选择 "Manage Jenkins" -> "Manage Plugins"。
- 在 "Available" 标签页搜索 "Docker Pipeline" 和 "Docker Commons Plugin" 插件,并进行安装。
3. 配置 Docker 连接
- 进入 Jenkins 管理界面,选择 "Manage Jenkins" -> "Configure System"。
- 找到 "Cloud" 部分,点击 "Add a new cloud",选择 "Docker"。
- 配置 Docker 主机的 URL(例如:unix:///var/run/docker.sock)。
- 测试连接是否成功。
- 可以配置多个 Docker 连接,例如用于开发、测试和生产环境。
4. 创建 Jenkins Pipeline
- 创建一个新的 Jenkins Job,选择 "Pipeline" 类型。
- 在 Pipeline 脚本中使用 Docker 插件提供的步骤来构建和运行 Docker 镜像。
5. 示例 Pipeline 脚本
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'docker build -t my-app . '
sh 'docker run -d -p 8080:8080 my-app'
}
}
}
}
脚本解释:
- agent: 指定 Jenkins Job 运行的环境,这里使用 Docker 镜像
maven:3-alpine
。 - args: 指定 Docker 容器启动参数,这里将本地 Maven 仓库挂载到容器中。
- stages: 定义 Pipeline 的不同阶段,例如构建、测试和部署。
- steps: 每个阶段包含具体的执行步骤,例如使用 Maven 构建项目、运行测试和构建 Docker 镜像。
6. 运行 Jenkins Job
- 保存 Pipeline 脚本并运行 Jenkins Job。
- Jenkins 将会自动启动 Docker 容器,并在容器内执行构建、测试和部署步骤。
7. 扩展功能
- 可以使用 Docker Compose 运行多个容器的应用程序。
- 可以使用 Kubernetes 插件将应用程序部署到 Kubernetes 集群。
- 可以使用 Jenkins Shared Libraries 来共享 Pipeline 脚本和代码。
8、docker配置测试连接的时候报错处理
测试连接的时候报错了:java.io.IOException: com.sun.jna.LastErrorException: [13] Permission denied
这个错误通常表示 Jenkins 没有足够的权限访问 Docker 守护进程。要解决这个问题,你可以尝试以下几种方法:
- 将 Jenkins 用户添加到 docker 组:- 在终端中执行以下命令,将 Jenkins 用户添加到 docker 组:
sudo usermod -aG docker jenkins
- 重启 Jenkins 服务,使更改生效:sudo systemctl restart jenkins
- 使用 sudo 运行 Docker 命令:- 在 Jenkins 系统配置页面(Manage Jenkins -> Configure System),找到 Docker 部分。- 在 "Docker Host URI" 字段中,将值更改为:
unix:///var/run/docker.sock
- 在 "Connect method" 部分,选择 "Connect with SSH"。- 配置 SSH 的详细信息,如主机名、用户名和认证方式。- 在 "Prefix Start Command" 字段中,输入sudo
,这将使 Jenkins 以 sudo 权限运行 Docker 命令。 - 修改 Docker 守护进程的配置:- 编辑 Docker 守护进程的配置文件(通常位于
/etc/docker/daemon.json
),添加以下内容:{ "group": "jenkins", "live-restore": true}
- 重启 Docker 守护进程,使更改生效:sudo systemctl restart docker
- 使用 TCP 连接而不是 Unix 套接字:- 编辑 Docker 守护进程的配置文件(通常位于
/etc/docker/daemon.json
),添加以下内容:{ "hosts": ["tcp://0.0.0.0:2375"]}
- 重启 Docker 守护进程,使更改生效:sudo systemctl restart docker
- 在 Jenkins 的 Docker 配置中,将 "Docker Host URI" 更改为:tcp://localhost:2375
请注意,上述方法可能会根据你的具体环境和安全要求而有所不同。在修改配置之前,请务必了解每个选项的安全隐患。
在进行任何更改后,请确保重启 Jenkins 和 Docker 守护进程,以使更改生效。然后,重新测试 Jenkins 与 Docker 的连接,确保问题已经解决。
版权归原作者 Coder加油! 所有, 如有侵权,请联系我们删除。