Docker 部署 Jenkins持續集成(CI)工具

@[TOC](Docker 部署 Jenkins持續集成(CI)工具)


前言

Jenkins 是一個流行的開源自動化工具,廣泛應用于持續集成(CI)和持續交付(CD)的環境中。通過 Docker 部署 Jenkins,可以簡化安裝和配置過程,并讓你方便地管理 Jenkins 容器。

本文將介紹如何使用 Docker 部署 Jenkins,并對比兩種端口配置方式:使用 host 網絡模式和使用 port 映射來設置 Jenkins 容器的訪問端口。


一、準備工作

首先,確保你的系統上已經安裝了 Docker。

Linux上進行Docker安裝有兩種方式:

  1. Docker自動化安裝
  2. Docker手動安裝

可以根據該文章的步驟進行安裝:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、設置變量和目錄結構

在部署 Jenkins 之前,首先設置一些變量并創建相關目錄,以確保 Jenkins 數據和日志能夠持久化存儲。

#!/bin/bash# 設置變量
PORT=8081
PROJECT_DIR="/opt/docker/jenkins"# 創建目錄結構
mkdir -p "$PROJECT_DIR/jenkins_home"
mkdir -p "$PROJECT_DIR/logs"
  • PORT=8081 設置 Jenkins 容器暴露的端口。可以根據需求修改為其他端口。
  • PROJECT_DIR 是 Jenkins 配置和數據存儲的根目錄。
  • 創建 jenkins_home 目錄來存儲 Jenkins 的數據。
  • 創建 logs 目錄來存儲 Jenkins 的日志文件。

三、配置 Docker 權限和網絡

運行 Jenkins 容器時,我們可能需要賦予它一些特權和網絡設置,具體如下:

  • --privileged=true:該選項賦予容器管理員權限,這樣容器可以執行更多操作。需要評估是否賦予這個權限。
  • --network=host:使容器與主機共享網絡堆棧,而不進行端口映射。Jenkins 將直接使用主機的端口。
  • --cap-add=NET_ADMIN:允許容器管理網絡接口,某些 Jenkins 插件可能需要此權限。
  • --cap-add=SYS_PTRACE:允許容器內的進程進行調試,通常用于調試工具或監控進程。

四、啟動 Jenkins 容器

1. 使用 host 網絡模式(共享主機網絡)

通過設置 --network host,容器將直接使用宿主機的網絡堆棧。此時,不需要端口映射,容器會占用主機上的端口 8080。因此,訪問 Jenkins 的 URL 會直接是宿主機的 IP 地址。

# 運行 Jenkins 容器(使用 host 網絡)
docker run -d \--restart=always \--cap-add=SYS_PTRACE \--cap-add=NET_ADMIN \--name jenkins \-u root \-e JENKINS_OPTS="--httpPort=$PORT" \-v "$PROJECT_DIR/jenkins_home:/var/jenkins_home" \-v "$PROJECT_DIR/logs:/var/log/jenkins" \-v "/var/run/docker.sock:/var/run/docker.sock" \-v "/etc/localtime:/etc/localtime" \--network host \jenkins/jenkins:lts-alpine-jdk17

修改 host模式下 Jenkins 端口的正確方法:

如果你需要更改 Jenkins URL端口,可以直接修改 jenkins.model.JenkinsLocationConfiguration.xml 文件。
這個文件通常位于 Jenkins 的數據目錄中(即 /var/jenkins_home)。

  • 找到并打開 /var/jenkins_home/jenkins.model.JenkinsLocationConfiguration.xml 文件。

  • 修改 標簽中的端口部分,例如:

    <jenkinsUrl>http://localhost:8081/</jenkinsUrl>
    

優點:

  • 不需要額外的端口映射,容器和主機共享網絡堆棧。
  • 對于沒有多個容器的簡單環境,配置非常方便。

缺點:

  • 端口直接共享主機端口,因此如果主機上有其他服務占用了相同的端口,可能會導致沖突。
  • 不能靈活配置容器的端口映射。

2. 使用 port 映射(綁定特定端口)

如果你想控制容器的端口映射,或者在一臺機器上運行多個 Docker 容器,可以使用 -p 參數將宿主機的端口映射到容器的端口。在這種情況下,Jenkins 容器會綁定到宿主機的指定端口,而不是共享整個主機的網絡。

# 運行 Jenkins 容器(使用端口映射)
docker run -d \--restart=always \--cap-add=SYS_PTRACE \--cap-add=NET_ADMIN \--name jenkins \-u root \-p "$PORT:8080" \-v "$PROJECT_DIR/jenkins_home:/var/jenkins_home" \-v "$PROJECT_DIR/logs:/var/log/jenkins" \-v "/var/run/docker.sock:/var/run/docker.sock" \-v "/etc/localtime:/etc/localtime" \jenkins/jenkins:lts-alpine-jdk17

優點:

  • 容器和宿主機的網絡堆棧相互隔離,避免了端口沖突。
  • 可以靈活設置宿主機與容器之間的端口映射。
  • 適合在單臺機器上運行多個容器時使用不同的端口。

缺點:

  • 需要手動設置端口映射(如果有多個容器)。

五、Docker 內安裝 Docker 環境

如果你需要在 Jenkins 容器內執行 Docker 命令(例如,構建 Docker 鏡像),你可以通過在容器中安裝 Docker 客戶端來實現:

# 安裝 Docker CLI 工具
apk add docker-cli

這將允許 Jenkins 在容器內部調用 Docker 命令。

六、訪問 Jenkins

無論你選擇了哪種端口配置方式,你都可以通過瀏覽器訪問 Jenkins Web 界面:

  • 使用 host 網絡模式:訪問 http://<your-server-ip>:8080,直接通過主機的 IP 地址。
  • 使用 port 映射:訪問 http://<your-server-ip>:8081,通過宿主機上映射的端口(在這里是 8081)。

首次訪問時,Jenkins 會要求你輸入解鎖密鑰。你可以在容器日志中找到該密鑰:

在這里插入圖片描述
復制并粘貼日志中的密鑰,完成 Jenkins 的初始設置。


總結

通過 Docker 部署 Jenkins 容器并設置端口映射或共享主機網絡堆棧,都是部署 Jenkins 的有效方式。選擇哪種方式,取決于你的具體需求:

  • 如果你希望容器與宿主機共享網絡,避免端口映射,選擇 host 網絡模式
  • 如果你需要靈活地控制容器與宿主機的端口映射,選擇 port 映射 方式。

通過這種方式,你可以輕松地在 Docker 中管理 Jenkins 環境,提升持續集成和持續交付的效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71903.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71903.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Effective Objective-C》閱讀筆記(中)

目錄 接口與API設計 用前綴避免命名空間沖突 提供“全能初始化方法” 實現description方法 盡量使用不可變對象 使用清晰而協調的命名方式 方法命名 ?編輯類與協議命名 為私有方法名加前綴 理解OC錯誤模型 理解NSCopying協議 協議與分類 通過委托與數據源協議進行…

C++程序員內功修煉——Linux C/C++編程技術匯總

在軟件開發的宏大版圖中&#xff0c;C 語言宛如一座巍峨的高山&#xff0c;吸引著無數開發者攀登探索。而 Linux 操作系統&#xff0c;以其開源、穩定、高效的特性&#xff0c;成為了眾多開發者鐘愛的開發平臺。將 C 與 Linux 相結合&#xff0c;就如同為開發者配備了一把無堅不…

數據庫索引:缺點與類型全解析

在數據庫的世界里&#xff0c;索引就像是一本書的目錄&#xff0c;它能幫助我們快速定位到所需的數據&#xff0c;極大地提升查詢效率。然而&#xff0c;就如同任何事物都有兩面性一樣&#xff0c;索引也并非完美無缺。今天&#xff0c;我們就來深入探討一下索引的缺點以及常見…

【python】提取word\pdf格式內容到txt文件

一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""讀取 PDF 文件內容:param file_path: PDF 文件路徑:return: 文件內容文本"""try:text ext…

嵌入式八股文(五)硬件電路篇

一、名詞概念 1. 整流和逆變 &#xff08;1&#xff09;整流&#xff1a;整流是將交流電&#xff08;AC&#xff09;轉變為直流電&#xff08;DC&#xff09;。常見的整流電路包括單向整流&#xff08;二極管&#xff09;、橋式整流等。 半波整流&#xff1a;只使用交流電的正…

精選案例展 | 智己汽車—全棧可觀測驅動智能化運營與成本優化

本案例為“觀測先鋒 2024 可觀測平臺創新應用案例大賽”精選案例&#xff0c;同時榮獲IT168“2024技術卓越獎評選-年度創新解決方案”獎。 項目背景 近年來&#xff0c;中國汽車行業進入轉型升級階段&#xff0c;智能網聯技術成為行業發展的核心。車聯網、自動駕駛等技術的加速…

速通HTML

目錄 HTML基礎 1.快捷鍵 2.標簽 HTML進階 1.列表 a.無序列表 b.有序列表 c.定義列表 2.表格 a.內容 b.合并單元格 3.表單 a.input標簽 b.單選框 c.上傳文件 4.下拉菜單 5.文本域標簽 6.label標簽 7.按鈕標簽 8.無語義的布局標簽div與span 9.字符實體 HTML…

【Python模塊】——pymysql

pymysql是python操作mysql的標準庫&#xff0c;可以通過pip install快速導入pymysql包操作數據庫 使用pymysql操作mysql 簡單demo import pymysql connect pymysql.connect(host"localhost",port3306,user"root",password"root",database&quo…

IP離線庫助力破解網絡反詐難題

毫秒級響應識別異常訪問 IP離線庫集成全球全量IP地址的詳細信息&#xff0c;包括地理地址查詢、運營商、經緯度、代理識別等多種維度數據。例如&#xff1a; 當用戶賬號頻繁從北京、越南等多地IP登錄時&#xff0c;系統將自動觸發風險預警&#xff1b; 檢測到訪問IP為已知機…

lattice hdl實現spi接口

在lattice工具鏈中實現SPI接口通常涉及以下步驟: 定義硬件SPI接口的管腳。配置SPI時鐘和模式。編寫SPI主機或從機的控制邏輯。 展示了如何在Lattice工具鏈中使用HDL語言(例如Verilog)來配置SPI接口: lattice工程 頂層:spi_slave_top.v `timescale 1ns/ 1ps module spi_…

Spring 循環依賴解析與解決方案

文章目錄 1. 什么是循環依賴&#xff1f;1.1 概念解析1.2 示例代碼 2. 循環依賴的類型2.1 構造器循環依賴&#xff08;不可解決 ?&#xff09;2.2 Setter 方式或 Autowired 方式的循環依賴&#xff08;可解決 ?&#xff09; 3. 解決循環依賴的方式3.1 方式一&#xff1a;使用…

Cesium@1.126.0,創建3D瓦片,修改樣式

第一步&#xff1a;添加3D建筑 Cesium.createOsmBuildingsAsync()這是一個異步方法&#xff0c;所以要寫在一個異步函數里 創建一個函數 const create3DBuilding async (viewer) > {try {// 添加3D建筑const tileset await Cesium.createOsmBuildingsAsync();viewer.scen…

力扣-貪心-1005 k次取反后最大化的數組和

思路 找到絕對值最大的&#xff0c;然后如果是負數就變成正的&#xff0c;所有數遍歷完之后&#xff0c;有兩種情況&#xff0c;一種是k已經為0了&#xff0c;不需要再取反了&#xff0c;一種是所有數都為正數&#xff0c;k不為0&#xff0c;此時對絕對值最小的數操作即可 代…

vue2項目打包后js文件過大, 首次加載緩慢

vue2項目打包后js文件過大, 首次加載緩慢 安裝插件 npm i compression-webpack-plugin6.1.1 -D配置vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin)module.exports {configureWebpack: {plugins:[new CompressionWebpackPlugin({filen…

高級SQL技術在Python項目中的應用:ORM與深度性能優化

引言 在現代Python項目開發中,數據庫交互遠不止是數據的簡單存取,它已成為構建高性能、可維護應用的核心瓶頸和關鍵能力所在。 僅僅依賴基礎SQL查詢,雖然入門簡單,卻難以應對日益增長的應用挑戰。這些挑戰主要體現在以下幾個方面: 性能瓶頸: 數據量劇增: 從百萬到數十億乃…

基于 C++ Qt 的 Fluent Design 組件庫 QFluentWidgets

簡介 QFluentWidgets 是一個基于 Qt 的 Fluent Designer 組件庫&#xff0c;內置超過 150 個開箱即用的 Fluent Designer 組件&#xff0c;支持亮暗主題無縫切換和自定義主題色。 編譯示例 以 Qt5 為例&#xff08;Qt6 也支持&#xff09;&#xff0c;將 libQFluentWidgets.d…

抖音視頻如何下載保存去水印

隨著短視頻平臺的興起&#xff0c;抖音作為國內最受歡迎的短視頻平臺之一&#xff0c;吸引了大量用戶上傳和觀看各種創意視頻。許多用戶在瀏覽抖音視頻時&#xff0c;往往會想要保存一些有趣或精彩的視頻片段&#xff0c;但抖音視頻通常會有水印&#xff0c;影響觀看體驗。為了…

React 源碼揭秘 | 更新隊列

前面幾篇遇到updateQueue的時候&#xff0c;我們把它先簡單的當成了一個隊列處理&#xff0c;這篇我們來詳細討論一下這個更新隊列。 有關updateQueue中的部分&#xff0c;可以見源碼 UpdateQueue實現 Update對象 我們先來看一下UpdateQueue中的內容&#xff0c;Update對象&…

[SQL] 事務的四大特性(ACID)

&#x1f384;事務的四大特性 以下就是事務的四大特性&#xff0c;簡稱ACID。 原子性&#x1f4e2;事務時不可分割的最小操作單元&#xff0c;要么全部成功&#xff0c;要么全部失敗。一致性&#x1f4e2;事務完成后&#xff0c;必須使所有的數據都保持一致隔離性&#x1f4e2…

DeepSeek 提示詞:基礎結構

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…