【DevOps】Jenkins 集成Docker

news2024/12/24 2:07:21

目录

1. 安装 Docker 和 Jenkins

2. 在 Jenkins 中安装 Docker 插件

3. 配置 Docker 连接

4. 创建 Jenkins Pipeline

5. 示例 Pipeline 脚本

6. 运行 Jenkins Job

7. 扩展功能

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

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.coloradmin.cn/o/1655484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

介绍 ffmpeg.dll 文件以及ffmpeg.dll丢失怎么办的五种修复方法

ffmpeg.dll 是一个动态链接库文件,属于 FFmpeg运行库。它在计算机上扮演着非常重要的角色,因为它提供了许多应用程序和操作系统所需的功能和组件。当 ffmpeg.dll 文件丢失或损坏时,可能会导致程序无法正常运行,甚至系统崩溃。下面…

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块(CSS Fragmentation Module Level 3)中的一个属性,主要用于指定背景(background)、内边距(padding)、边框&#…

Flink container exit 143 问题排查

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

Flask SQLAlchemy 技术指南

文章目录 什么是 Flask SQLAlchemy?安装 Flask SQLAlchemy创建 Flask 应用和数据库模型添加和查询数据运行 Flask 应用总结**数据库迁移(Database Migrations)****复杂查询****关系模型****事务处理****性能优化****安全性****扩展功能** Fla…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点:动态图片分帧提取 easyshell考点:流量分析 冰蝎3.0 Webphpsql考点:sql万能钥匙 fileit考点:xml注入 外带 Cryptosecretbit考点:代码阅读…

Pyecharts的编程环境准备

一,准备Python编程环境: Python版本:3.10以上,最高版本3.12 https://www.python.org/ 进入官网,点击downloads—>windows进入下载页面,搜索”3.10.6”找到指定版本,下载并安装64位Installer…

可视化-实验四- seaborn工具包绘图基础及关系

一、任务一 1.1 开发环境 多种选择方案(大家根据自己的编程习惯,选择适合自己的工具),老师授课如下:Anaconda3Jupter 1.2 特殊包 导入工具包设置中文显示: import matplotlib.pyplot as plt import p…

HTTP常见面试题(二)

3.1 HTTP 常见面试题 HTTP特性 HTTP 常见到版本有 HTTP/1.1,HTTP/2.0,HTTP/3.0,不同版本的 HTTP 特性是不一样的。 HTTP/1.1 的优点有哪些? HTTP 最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。 1. 简单 HTTP…

Metasploit Framework(MSF)从入门到实战(二)

Metasploit Framework(MSF)从入门到实战(一)_安装msf更新-CSDN博客 MSF模块介绍 MSF有7个模块,分别对下面目录下的7个子文件夹: auxiliary(辅助模块 ) show auxiliary //查看所有…

vue视图不刷新强制更新数据this.$forceUpdate()

在vue中,更新视图数据,不刷新页面,需要强制更新数据才可以 前言 在对数据就行添加和删除时,发现页面视图不更新,排除发现需要强制更新才可以 点击添加或删除,新增数据和删除就行,但在不使用fo…

二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备,用于在局域网(LAN)中转发数据帧。它工作在OSI模型的第二层,即数据链路层。二层交换机通过学习和维护MAC地址表,实现了数据的快速转发和广播域的隔离。 实…

Spring-依赖注入的处理过程

前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到AutowireCapableBeanFactory中有两个方法: 第一个是单个注入:…

CCF-Csp算法能力认证, 202312-1仓库规划含解析

前言 推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下 「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷…

高职学院建设人工智能专业群可行性分析

一、人工智能技术人员的需求分析 随着科技的迅猛发展和数字化转型的深入,人工智能(AI)已成为推动产业升级和社会变革的重要力量。从当前行业趋势和技术发展来看,对于人工智能技术人员的需求预计将呈现爆炸性增长的态势。 首先&am…

智慧仓储数字孪生三维可视化平台,提升企业物流效率和转型升级

智慧仓储数字孪生三维可视化平台,提升企业物流效率和转型升级。智慧仓储数字孪生三维可视化平台,正逐渐成为现代企业物流领域的重要工具。它通过集成先进的数字技术,实现仓储管理的全面智能化,为企业的物流效率和转型升级提供了有…

软考143-下午题-【试题二】:E-R图、关系模式

一、分值与目标 15分,目标10 二、题目形式 示例: 三、E-R图的基本图形元素 示例: 3-1、实体 1、弱实体 在现实世界中有一种特殊的联系,这种联系代表实体间的所有 (Ownership) 关系,例如:职工与家属的联系…

WPF/C#:ProgressBar的基本使用

前言 在日常开发过程中,如果遇到需要一段时间才能完成的任务,通常需要给用户一个进度条提示。今天给大家介绍的是WPF/C#中ProgressBar的基本使用。 ProgressBar的介绍 在WPF(Windows Presentation Foundation)中,Pr…

AI图书推荐:ChatGPT在真实商业世界中的应用

《ChatGPT在真实商业世界中的应用》 (Unleashing The Power of ChatGPT: A Real World Business Applications)首先概述了ChatGPT及其在对话式人工智能领域的影响。接着,你将深入了解ChatGPT的技术方面,理解机器学习算法和自然语言处理如何在后台工作。然…

【GPT调用】本地使用python调用GPT接口

python调用GPT接口 环境变量设置主调用方法执行结果 环境变量设置 .env文件中配置GPT环境变量 api_key"你的GPT-API-KEY" urlhttps://ai-proxy.ksord.com/wps.openai.azure.com/openai/deployments/gpt-4-32k/chat/completions?api-version2023-09-01-preview主调…

红帽为 Red Hat OpenShift AI 扩大与 Elasticsearch 向量数据库的合作

作者:来自 Elastic Aditya Tripathi 红帽和 Elastic 今天宣布开展合作,以便在 Red Hat OpenShift AI 上集成 Elasticsearch 向量数据库。 Red Hat OpenShift 用户现在可以通过红帽生态系统目录实施 Elasticsearch 以进行向量搜索和检索增强生成 (RAG) 应…