【DevOps】Jenkins 集成Docker

ops/2024/9/24 17:30:59/

目录

1. 安装 Docker 和 Jenkins

2. 在 Jenkins 中安装 Docker 插件

3. 配置 Docker 连接

4. 创建 Jenkins Pipeline

5. 示例 Pipeline 脚本

6. 运行 Jenkins Job

7. 扩展功能

docker%E9%85%8D%E7%BD%AE%E6%B5%8B%E8%AF%95%E8%BF%9E%E6%8E%A5%E7%9A%84%E6%97%B6%E5%80%99%E6%8A%A5%E9%94%99%E5%A4%84%E7%90%86-toc" style="margin-left:80px;">8、docker配置测试连接的时候报错处理


将 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 脚本和代码。

docker%E9%85%8D%E7%BD%AE%E6%B5%8B%E8%AF%95%E8%BF%9E%E6%8E%A5%E7%9A%84%E6%97%B6%E5%80%99%E6%8A%A5%E9%94%99%E5%A4%84%E7%90%86">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 的连接,确保问题已经解决。


http://www.ppmy.cn/ops/33478.html

相关文章

Transformer中的数据输入构造

文章目录 1. 文本内容2. 字典构造2.1 定义一个类用于字典构造2.2 拆分文本2.3 构造结果 3. 完整代码 1. 文本内容 假如我们有如下一段文本内容: Optics It is the branch of physics that studies the behaviour and properties of light . Optical Science 这段…

室外巡检机器人——A2型高防护轮式巡检机器人

在科技日新月异的时代,室外巡检机器人犹如一位无畏的守护者,悄然出现在我们的视野之中。它迈着坚定的步伐,穿梭于各种复杂的室外环境,承担着重要的巡检任务。它是科技与智慧的结晶,是保障安全与稳定的前沿力量。让我们…

XXL-JOB定时任务

1. xxl-job初识 1.1 xxl-job介绍 xxl-job 是大众点评大佬徐雪里开源的一款分布式任务调度框架,具有简单易用、轻量级、可扩展的特点。相比于Spring Task, Quartz,xxl-job有记录执行日志和运行大盘,方便开发人员和运维人员更好的管理任务。 …

机器学习Sklean基础教程

Scikit-learn(也称为 sklearn)是一个使用 python 语言的机器学习模块,内置了大量的监督和无监督学习算法,主要用于数据挖掘和数据分析。 以下是一个简单关于如何使用 sklearn 进行机器学习的指导: 安装: 首先&#…

MySQL-创建数据表

1.选择数据库 USE database_name;2.定义数据类型 设计表的结构,包括表名、列名、数据类型以及任何需要的约束 3.使用SQL语句创建数据表 使用CREATE TABLE语句来创建表 CREATE TABLE table_name(column1_name column1_data_type column1_constraints;column2_name …

AtCoder Beginner Contest 352 G. Socks 3(期望线性性+分治NTT板子题)

题目 一盒抽屉&#xff0c;里面有n(n<3e5)种袜子&#xff0c;第i种有ai(2<ai<3000)只 每次抽一只袜子不放回&#xff0c;直到凑齐一双袜子后结束&#xff0c; 求结束时抽取的次数的期望&#xff0c;答案对998244353取模 思路来源 元老群全月&starsilk&pro…

eve 导入linux

mkdir /opt/unetlab/addons/qemu/linux-centos7 cd /opt/unetlab/addons/qemu/linux-centos7 上传hda.qcow2 /opt/unetlab/wrappers/unl_wrapper -a fixpermissions Linux images - (eve-ng.net) Due to very high demand of this section and problems with how to crea…

Day43 Java反射(二)

Day43 Java反射&#xff08;二&#xff09; 文章目录 Day43 Java反射&#xff08;二&#xff09;一、利用反射操作方法二、利用反射操作方法里的参数和返回值三、利用反射操作泛型四、利用反射操作注解五、利用反射操作数组 一、利用反射操作方法 1、基本步骤 获取Class对象&…