当前位置: 首页 > news >正文

Jenkins Docker Cloud在Linux应用开发CI中的实践

Jenkins Docker Cloud在Linux应用开发CI中的实践

背景

通过代码提交自动触发CI自动构建、编译、打包是任何软件开发组织必不可少的基建,可以最大程度保证产物的一致性,方便跨组跨部门协作,代码MR等。

Docker在流水线中越来越重要,已经是最关键的组成部件之一,由于容器化具有的简单性,灵活性,隔离性和部署方便的特性,使得我们可以按需定制可重复的构建环境,本文就如何使用Docker容器作为Jenkins编译节点在Linux应用开发 CI中进行了实践。

前提条件

已部署好Jenkins服务,具备CI的基础设施。

技术方案

有别于windows,macos,ios可能较多会采用虚拟机或物理机方式部署编译节点,linux 采用 docker作为编译节点,容器化方式环境隔离性好,自动容器启动与关闭,环境部署方便,较虚拟机和物理机部署更节省人力时间成本。

工作流程:

  • Jenkins master发起pipeline流程
  • 通过Remote API去连接Docker Host
  • Docker Host拉起需要的容器,作为Jenkins slave
  • 容器中执行流水线工作
  • 流水线完成,Jenkins会停止并删除容器

ps: Jenkins master 节点只负责调控,具体的构建任务下放到Docker Slave节点中去

在这里插入图片描述

Jenkins docker slave node配置实践

1、 Jenkins 安装docker插件

安装完成后配置页面会生成Configure Clouds
路径:Jenkins - Manage Jenkins - System Configuration - Manage Nodes and Clouds
在这里插入图片描述

2、 docker host配置

2.1、 doker安装
sudo apt update
sudo apt upgrade
sudo apt install docker.io
2.2、安装自定义docker镜像
  • 可以采用Dockerfile自动构建镜像,也可以手动构建,此处假定已经构建好镜像并导出:linux_x86_64_node.tar
  • 导入镜像:
sudo docker load < linux_x86_64_node.tarsudo docker images
REPOSITORY                         TAG       IMAGE ID       CREATED          SIZE
linux_x86_64_node                  latest    f2cded8e78d6   30 minutes ago   3.19GB
2.3、启用docker Remote API
  • 本地环境下,docker客户端(各种docker命令)默认通过unix域socket与docker daemon通信,但我们的场景需要跨主机访问,即jenkins服务需要访问docker host,因此需要通过配置让docker daemon把服务暴露在tcp的2375端口上,这样就可以在网络上操作docker了。
  • 修改/lib/systemd/system/docker.service,添加tcp支持
    在这里插入图片描述
  • 修改完毕后执行如下命令使其生效:
systemctl daemon-reload
systemctl restart docker.service

3、jenkins docker cloud & agent配置

路径:Jenkins > Manage Jenkins > System Configuration > Manage Nodes and Clouds > Configure Clouds

3.1、 配置docker cloud

在这里插入图片描述

3.2、配置docker agent

在这里插入图片描述

4、 jenkins查看docker容器和镜像

路径:Jenkins > Manage Jenkins > Uncategorized > Docker
此处会列出远程docker host上所有运行的容器和安装的镜像,如下:
在这里插入图片描述

值得注意的是,jenkins通过Remote API启动docker容器时会进行SSH端口映射,将SSH端口22进行映射,如上图所示,将docker agent(启动的docker容器)的22端口映射为docker host宿主机的端口58255,这样jenkins才能通过ssh访问docker agent, workspace也是建立在docker agent中。

pipeline中使用docker agent

1、 声明式

pipeline {agent { label 'master' }stages {stage('Hello') {agent { label 'lava_x86_64_node_accelerate' }steps {sh 'echo Hello World'}}}
}

2、 脚本式

pipeline {agent { label 'master' }stages {stage('Hello') {steps {script {node ("lava_x86_64_node_accelerate") {sh 'echo Hello World'}}}}}
}

值得注意的是:上面的“lava_x86_64_node_accelerate"节点就是上文Jenkins docker slave node配置实践 - 3.2、配置docker agent中的labels字段。

补充

整个pipeline流程如下:
gitlab+jenkins CI实践
在这里插入图片描述

相关文章:

Jenkins Docker Cloud在Linux应用开发CI中的实践

Jenkins Docker Cloud在Linux应用开发CI中的实践 背景 通过代码提交自动触发CI自动构建、编译、打包是任何软件开发组织必不可少的基建&#xff0c;可以最大程度保证产物的一致性&#xff0c;方便跨组跨部门协作&#xff0c;代码MR等。 Docker在流水线中越来越重要&#xff…...

502 Bad Gateway with nginx + apache + subversion + ssl

svn commit的时候返回 unexpected http status 502 bad gateway on解决方法&#xff0c;参考&#xff1a;https://stackoverflow.com/questions/2479346/502-bad-gateway-with-nginx-apache-subversion-ssl-svn-copy 在nginx中代理svn中添加 location /svn {set $fixed_dest…...

【PostgreSQL内核学习(十八)—— 存储管理(存储管理的体系结构)】

存储管理 概述存储管理器的体系结构存储管理器的主要任务读写元组过程 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。 本文主要参考…...

Android的组件、布局学习

介绍 公司组织架构调整&#xff0c;项目组需要承接其他项目组的android项目&#xff0c;负责维护和开发新需求&#xff0c;故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否&#xff0c;是与F:\androidProject\android_lear…...

【离散数学】——期末刷题题库(树其一)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…...

光模块市场分析与发展趋势预测

光模块是光通信领域的重要组成部分&#xff0c;随着数字经济&#xff0c;大数据&#xff0c;云计算&#xff0c;人工智能等行业的兴起&#xff0c;光模块市场经历了快速发展&#xff0c;逐渐在数据中心、无线回传、电信传输等应用场景中得到广泛应用。本文将基于当前光模块全球…...

Python轴承故障诊断 (八)基于EMD-CNN-GRU并行模型的故障分类

目录 前言 1 经验模态分解EMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 2.3 故障数据的EMD分解可视化 2.4 故障数据的EMD分解预处理 3 基于EMD-CNN-GRU并行模型的轴承故障诊断分类 3.1 训练数据、测试数据分组&#xff0c;数据分ba…...

鸿蒙实现年月日十分选择框,支持年月日、月日、日、年月日时分、时分切换

import DateTimeUtils from ./DateTimeUtils;CustomDialog export default struct RQPickerDialog {controller: CustomDialogControllertitle: string 这是标题TAG: string RQPickerDialog// 0 - 日期类型&#xff08;年月日&#xff09; 1 - 时间类型&#xff08;时分&a…...

IntelliJ IDE 插件开发 | (三)消息通知与事件监听

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听 前言 在前两篇文章中讲解了关于插件开发的基础知识&…...

VUE小知识点

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 Vue 的主要作用是帮助开发者构建现代 Web 应用程序。它允许前端开发人员专注于应用程序…...

深入了解常见的应用层网络协议

目录 1. HTTP协议 1.1. 工作原理 1.2. 应用场景 1.3. 安全性考虑 2. SMTP协议 2.1. 工作原理 2.2. 应用场景 2.3. 安全性考虑 3. FTP协议 3.1. 工作原理 3.2. 应用场景 3.3. 安全性考虑 4. DNS协议 4.1. 工作原理 4.2. 应用场景 4.3. 安全性考虑 5. 安全性考虑…...

网络爬虫 多任务采集

一、JSON文件存储 JSON&#xff0c;全称为 JavaScript 0bject Notation,也就是JavaSript 对象标记&#xff0c;它通过对象和数组的组合来表示数据&#xff0c;构造简洁但是结构化程度非常高&#xff0c;是一种轻量级的数据交换格式。本节中&#xff0c;我们就来了解如何利用 P…...

真实并发编程问题-1.钉钉面试题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…...

基于vue+element-plus+echarts制作动态绘图页面(柱状图,饼图和折线图)

前言 我们知道echarts是一个非常强大的绘图库&#xff0c;基于这个库&#xff0c;我们可以绘制出精美的图表。对于一张图来说&#xff0c;其实比较重要的就是配置项&#xff0c;填入不同的配置内容就可以呈现出不同的效果。 当然配置项中除了样式之外&#xff0c;最重要的就是…...

2312llvm,02前端

前端 编译器前端,在生成目标相关代码前,把源码变换为编译器的中间表示.因为语言有独特语法和语义,所以一般,前端只处理一个语言或一组类似语言. 比如Clang,处理C,C,objective-C源码. 介绍Clang Clang项目是C,C,Objective-C官方的LLVM前端.Clang的官方网站在此. 实际编译器(…...

【MATLAB源码-第101期】基于matlab的蝙蝠优化算BA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蝙蝠算法&#xff08;BA&#xff09;是一种基于群体智能的优化算法&#xff0c;灵感来源于蝙蝠捕食时的回声定位行为。这种算法模拟蝙蝠使用回声定位来探测猎物、避开障碍物的能力。在蝙蝠算法中&#xff0c;每只虚拟蝙蝠代表…...

【数据结构】二叉树的模拟实现

前言:前面我们学习了堆的模拟实现&#xff0c;今天我们来进一步学习二叉树&#xff0c;当然了内容肯定是越来越难的&#xff0c;各位我们一起努力&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &#x1f448; &…...

open3d bug:pcd转txt前后位姿发生改变

1、open3d bug&#xff1a;pcd转txt前后位姿发生改变 open3d会对原有结果进行一个微小位姿变换 import open3d as o3d import numpy as np# 读取PCD点云文件 pcd o3d.io.read_point_cloud(/newdisk/darren_pty/zoom_centered_s2.pcd)# 获取点云坐标 points pcd.points# 指定…...

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用

目录 一、实验 1.部署Ansible自动化运维工具 2.K8S 节点安装nginx 3.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用 二、问题 1.ansible安装报错 2.ansible远程ping失败 3. Jenkins流水线通过ansible命令直接ping多台机器的网络状态报错 一、实验 …...

OpenAI 疑似正在进行 GPT-4.5 灰度测试!

‍ 大家好&#xff0c;我是二狗。 今天&#xff0c;有网友爆料OpenAI疑似正在进行GPT-4.5灰度测试&#xff01; 当网友询问ChatGPT API调用查询模型的确切名称是什么时&#xff1f; ChatGPT的回答竟然是 gpt-4.5-turbo。 也有网友测试之后发现仍然是GPT-4模型。 这是有网友指…...

Navicat重置工具:Mac版Navicat无限试用终极指南

Navicat重置工具&#xff1a;Mac版Navicat无限试用终极指南 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否正在为Navicat Premium的14天试用期到期而烦恼&#xff1f;作…...

Windows 11下xray安装全流程:从下载到配置证书的保姆级教程

Windows 11安全工具配置全指南&#xff1a;从零开始搭建本地测试环境 在数字化生活日益普及的今天&#xff0c;个人电脑安全越来越受到重视。对于技术爱好者而言&#xff0c;了解和使用专业安全工具不仅能提升自身防护能力&#xff0c;也是学习网络安全知识的重要途径。本文将详…...

告别数据迷宫:手把手教你用DataHub搭建企业级元数据搜索中心(支持MySQL/Airflow/Superset)

告别数据迷宫&#xff1a;手把手教你用DataHub搭建企业级元数据搜索中心&#xff08;支持MySQL/Airflow/Superset&#xff09; 当数据资产像野草一样在组织内疯长时&#xff0c;工程师们常常发现自己被困在由数百个数据表、数十个BI看板和错综复杂的调度任务构成的迷宫中。上周…...

cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色

cv_unet_image-colorization效果展示&#xff1a;看AI如何为历史照片智能上色 1. 引言&#xff1a;让历史重现色彩的魅力 黑白照片承载着珍贵的记忆&#xff0c;但缺乏色彩总让人感觉少了些什么。想象一下&#xff0c;如果能将祖辈的老照片恢复成彩色&#xff0c;看到他们当年…...

WorkshopDL:跨平台Steam创意工坊下载器,突破平台限制获取海量模组资源

WorkshopDL&#xff1a;跨平台Steam创意工坊下载器&#xff0c;突破平台限制获取海量模组资源 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在Epic Games或GOG平台购…...

基于STM32F103C8T6和LiuJuan20260223Zimage的物联网边缘智能网关

基于STM32F103C8T6和LiuJuan20260223Zimage的物联网边缘智能网关 最近在折腾一个智能农业的小项目&#xff0c;发现传感器数据一多&#xff0c;全往云上扔&#xff0c;不仅流量吃不消&#xff0c;响应也慢半拍。要是能先在本地处理一下&#xff0c;只把关键信息传上去&#xf…...

SiameseAOE中文-base实战教程:ABSA结果用于A/B测试——新旧版本UI情感变化分析

SiameseAOE中文-base实战教程&#xff1a;ABSA结果用于A/B测试——新旧版本UI情感变化分析 1. 快速了解SiameseAOE模型 SiameseAOE是一个专门用于中文属性情感抽取的模型&#xff0c;它能从文本中自动识别出属性词和对应的情感词。简单来说&#xff0c;就是能从用户评论中找出…...

SVN 查看历史信息

SVN 查看历史信息 引言 Subversion(简称SVN)是一款广泛使用的版本控制系统,它允许用户跟踪源代码的变更历史,并协同工作。在软件开发过程中,查看历史信息对于理解代码的演变过程、回溯错误、分析代码演变趋势等至关重要。本文将详细介绍如何在SVN中查看历史信息。 SVN …...

OpenClaw低代码方案:Qwen3-32B将Excel需求转为自动化流程

OpenClaw低代码方案&#xff1a;Qwen3-32B将Excel需求转为自动化流程 1. 从Excel到ERP的自动化困境 上周市场部的同事又来找我帮忙了。他们每天要手动将几十份Excel表格里的客户订单录入到公司老旧的ERP系统里——这个上世纪风格的绿色界面软件&#xff0c;既没有批量导入功能…...

单片机串口通信原理与应用详解

单片机串口通信技术详解1. 串口通信基础概念1.1 串行通信原理串行通信是一种仅使用一根接收线(RX)和一根发送线(TX)进行数据传输的通信方式。与并行通信相比&#xff0c;虽然传输速度较慢&#xff0c;但具有布线简单、成本低的优势。典型的串口通信系统包含三根基本信号线&…...