Jenkins Pipeline(二)-設置Docker Agent

設計流水線的目的是更方便地使用?Docker鏡像作為單個?Stage或整個流水線的執行環境。

1.安裝必要插件?

在Jenkins服務器上已經安裝了插件。

  1. Docker Pipeline
  2. Pipeline Maven Integration
  3. Pipeline Maven Plugin API

如果插件缺少什么,再次檢查并安裝即可。

2. 配置Docker連接

  • 進入Jenkins管理界面,選擇“Manage Jenkins” -> “Configure System”。
  • 找到“Cloud”部分,點擊“Add a new cloud”,選擇“Docker”。
  • 配置Docker主機的URL(例如:unix:///var/run/docker.sock)。
  • 測試連接是否成功。可以配置多個Docker連接,例如用于開發、測試和生產環境。

如果遇到:

unix:///var/run/docker.sock,java.net.BindException: Permission denied

通常意味著當前用戶沒有足夠的權限訪問 Docker 守護進程。

原因分析:

Docker 守護進程默認綁定到 Unix 套接字?/var/run/docker.sock?而非 TCP 端口,該 Unix 套接字歸?root?用戶擁有,因此 Docker 守護程序默認只能以?root?用戶的身份運行。

#創建docker 組
sudo groupadd docker#將用戶添加到 docker 組
sudo usermod -aG docker jenkins#重啟 Docker 服務
sudo systemctl restart docker#重新登錄
newgrp docker#查看組下的用戶
grep "^docker:" /etc/group | cut -d: -f4#查看用戶
grep "^jenkins:" /etc/passwd#檢查并調整 /var/run/docker.sock 的權限
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock#檢查 Docker 服務狀態
sudo systemctl status docker

3.配置 Jenkins 憑證(可選)

在使用 Docker 插件之前,我們需要配置 Jenkins 憑證,以便 Jenkins 可以連接到 Docker 主機。以下是配置憑證的步驟:

  1. 打開 Jenkins 控制臺。
  2. 導航到“Manage Jenkins” > “Manage Credentials”。
  3. 在“Stores scoped to Jenkins”下,選擇“Jenkins”。
  4. 在“System”下,選擇“Global credentials (unrestricted)”。
  5. 單擊“Add Credentials”創建新的憑證。
  6. 選擇“Username with password”作為憑證類型。
  7. 輸入 Docker 主機的用戶名和密碼。
  8. 提供憑證的 ID 和描述信息,然后保存。

4.創建Docker 鏡像

使用DockerFile創建一個的鏡像docker_in_docker_jdk23_mvn_git

# 使用官方的ubuntu鏡像作為基礎鏡像
FROM ubuntuUSER rootrun pwdrun apt-get -o Acquire::Check-Valid-Until=false update# 安裝docker
# 這里容易出錯443,所以需要多執行幾次docker build
RUN apt-get install -y ca-certificates curl gnupg lsb-release
RUN curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get -o Acquire::Check-Valid-Until=false update
RUN apt-get install -y  --allow-unauthenticated docker-ce docker-ce-cli containerd.io#  安裝jdk
run mkdir /usr/lib/jvm/
add openjdk-23.0.2_linux-x64_bin.tar.gz /usr/lib/jvm/
WORKDIR /usr/lib/jvm/
run mv jdk-23.0.2 openjdk-23-jdk
env JAVA_HOME=/usr/lib/jvm/openjdk-23-jdk
env PATH=$JAVA_HOME/bin:$PATH#  安裝Maven
run mkdir /etc/maven
add apache-maven-3.9.10.tar.gz /etc/maven
env MAVEN_HOME=/etc/maven/apache-maven-3.9.10
env PATH=$MAVEN_HOME/bin:$PATH# 安裝git
run apt-get install -y git# 安裝vim編輯器
run apt-get install vim -y --allow-unauthenticated
run echo 'set nu' > ~/.vimrc# 拷貝時區文件,如果沒有就先注釋,設置時區
add zoneinfo.tar /usr/share/
run ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
run echo 'Asia/Shanghai' >/etc/timezone# 安裝網絡工具
run apt-get install -y net-tools inetutils-ping curl
# run apt-get install -y wget # 設置語言
env LANG=C.UTF-8run mkdir -p /app/application
workdir /app/applicationRUN groupadd -r jenkins && \useradd -r -g jenkins -m jenkins && \chown -R jenkins:jenkins /app && \chmod -R 755 /app# 暴露Docker的socket給外部容器使用
VOLUME /var/run/docker.sockENTRYPOINT ["tail","-f","/dev/null"]# docker run -d --name docker_in_docker_jdk_mvn_git -v /var/run/docker.sock:/var/run/docker.sock docker_in_docker_jdk_mvn_git

5.創建Pipeline和SCM腳本

pipeline {agent {docker {image 'docker_in_docker_jdk23_mvn_git:latest'args "-v /var/run/docker.sock:/var/run/docker.sock --entrypoint='' -u root:root"}}stages {stage('init') {steps {echo "check info"sh 'java -version'sh 'mvn -v'sh 'git --version'sh 'docker info'sh 'whoami'sh 'pwd'}}stage('git clone') {steps {echo "git clone"dir("appcode"){sh 'pwd'sh 'ls -l' git(url: 'https://gitee.com/xinlicn/springcloud-maven.git',branch: 'master',credentialsId: 'mygittree')script{env.CODE_PATH = "appcode/producter-service/producter"}}}}stage('maven build') {steps {echo "maven building"script{dir("${CODE_PATH}"){sh 'ls -l'sh " mvn -f pom.xml clean package"def pomfile = "${env.project_name}/pom.xml"def pom = readMavenPom file: "${pomfile}"env.POM_PROJECT_NAME = "${pom.artifactId}"env.POM_PROJECT_VERSION = "${pom.version}"echo "output:${POM_PROJECT_NAME}:${POM_PROJECT_VERSION}"}}}}stage('docker build') {steps {echo "docker build"script{dir("${CODE_PATH}"){def docker_name ="${POM_PROJECT_NAME}:${POM_PROJECT_VERSION}"sh "docker build -f dockerfile ./${env.project_name}/target --build-arg appname=${POM_PROJECT_NAME}.jar -t ${docker_name}"}}}}}
}

6.運行Pipeline

通過pipeline的log可以看出,所有的構建過程都是在docker容器中進行的。

參考:

在流水線中使用Docker

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

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

相關文章

神經網絡|(十六)概率論基礎知識-伽馬函數·中

【1】引言 前序學習進程中,已經初步了解了伽馬函數,認識到nnn的階乘計算可以轉化為: n!n!?limk→∞kn?k!(nk)!limk→∞kn?k!?n!(nk)!limk→∞kn?k!(n1)(n2)...(nk)n!n! \cdot lim_{k\rightarrow\infty}\frac{k^n\cdot k!}{(nk)!}\\lim_…

設計模式Books Reading

文章目錄 設計模式 創建型設計模式 工廠方法 示例說明 工廠方法模式結構 案例偽代碼 工廠方法模式適合應用 實現方式 工廠方法模式優缺點 與其他模式的關系 概念示例 抽象工廠 抽象工廠模式結構 抽象工廠模式適合應用場景 實現方式 抽象工廠模式優缺點 與其他模式的關系 代碼示…

接吻數問題:從球體堆疊到高維空間的數學奧秘

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 1 接吻數問題概述 接吻數問題(Kissing Number Problem&am…

深度學習③【卷積神經網絡(CNN)詳解:從卷積核到特征提取的視覺革命(概念篇)】

文章目錄先言1. 卷積核:特征檢測的魔法窗口1.1什么是卷積核:可學習的特征檢測器1.2可視化理解:邊緣檢測、紋理提取、特征發現1.3代碼實現:使用PyTorch定義和初始化卷積層2. 卷積運算的數學原理2.1.離散卷積計算:滑動窗…

當不想安裝telnet或nc時,可使用 Linux 系統默認自帶的bash原生網絡功能或ping(輔助判斷)測試連通性

1. 用bash原生/dev/tcp測試端口(無需任何工具)bashshell 內置了/dev/tcp虛擬設備,可直接通過腳本測試端口是否能連接,執行以下命令(替換數據庫 IP 和端口):# 格式:echo > /dev/tc…

【STM32外設】ADC

聲明:上圖是STM32產品型號各字段含義,本文基于STM32F103 1、ADC的一些概念 常規通道(常規組)和注入通道(注入組)(regular channels and injected channels)ADC支持的外部通道總共16個(且被3個ADC共享,ADC12…

Aha Moment——啊哈時刻!

1. 理解面試官的意圖面試官問你“Aha moment”,其實是想知道:你是否真正理解這個概念:不只是背定義,而是理解其為什么重要。你如何發現它:考察你的數據分析方法論和技術能力(用了哪些數據、指標、模型&…

RAG教程5:多表示索引和ColBERT

文章目錄 導入依賴包 多表示索引 ColBERT 導入依賴包 %pip install youtube-transcript-api pytube多表示索引 from langchain_community.document_loaders import WebBaseLoader from langchain_text_splitters import RecursiveCharacterTextSplitterloader = WebBaseL

來自火山引擎的 MCP 安全授權新范式

資料來源:火山引擎-開發者社區 本文旨在深入剖析火山引擎 Model Context Protocol (MCP) 開放生態下的 OAuth 授權安全挑戰,并系統闡述火山引擎為此構建的多層次、縱深防御安全方案。面對由 OAuth 2.0 動態客戶端注冊帶來的靈活性與潛在風險,…

瑞芯微RK3506開發板PWM輸入捕獲驅動調試記錄

本文演示PWM輸入信號采集,基于觸覺智能RK3506開發板。配置為: 3核Cortex-A7Cortex-M0多核異構處理器 主要接口:2路CAN FD,5路串口,RGB、MIPI、音頻、USB2.0 OTG等、板載雙百兆網口4G星閃SLEWiFi6BLE5.2。 PWM信號簡…

PHP的header()函數分析

PHP的header()函數是HTTP協議交互的核心工具,它通過直接操縱響應頭實現服務器與客戶端之間的元數據通信。作為PHP原生函數,其設計初衷是處理HTTP協議層的關鍵操作,包括狀態碼設置、內容類型聲明和緩存控制等基礎功能。在Web開發中&#xff0c…

根據并發和響應延遲,實現語音識別接口自動切換需求

根據并發和響應延遲,語音識別接口自動 切換需求 需求描述: 當請求的語音識別的請求數量大于3或者請求語音識別接口3秒不可達無響應,切換備用語音識別接口 科大訊飛語音識別作為備用接口 科大訊飛的API文檔: 進入訊飛開放平臺的網頁&#…

程序員之電工基礎-CV程序解決目標檢測

一、背景 興趣愛好來了,決定研發一個產品。涉及到電工和機械等知識,所以記錄一下相關的基礎知識。今天的內容又回到了我的主營板塊!!哈哈!!為后續整體集成做準備,先測試目標檢測部分的能力。 二…

B樹的概述以及插入邏輯

一,B樹的概述1.B樹(B-樹)又稱多路平衡查找樹,B樹所有節點中孩子數量的最大值n稱為B樹的階,通常用m表示比如當m為2就是常見的二叉樹一顆m階的B樹定義如下:1)每個結點最多有m-1個關鍵字;2)根節點最少可以只有1個關鍵字;3…

如何用 Kotlin 在 Android 手機開發一個小鬧鐘、計時器、秒表

以下是在 Android 上用 Kotlin 開發小鬧鐘、計時器和秒表的方法,分為核心功能實現和界面設計兩部分: 鬧鐘功能實現 AlarmManager 和 BroadcastReceiver // 設置鬧鐘 val alarmManager getSystemService(Context.ALARM_SERVICE) as AlarmManager val i…

LeetCode Hot 100 第8天

1. 73 矩陣置零(記錄標識) 鏈接:題目鏈接 題解: 題解 時間復雜度O(n*m): 方案1(空間復雜度O(n m)):matrix[i][j] 0,意味著 第i行、第j列所有元素都要置為0;維護能置為0行、列的集…

Python OpenCV圖像處理與深度學習:Python OpenCV開發環境搭建與入門

Python OpenCV入門:環境設置 學習目標 通過本課程,學員們將學習在Windows、macOS和Linux操作系統上安裝Python和OpenCV,配置開發環境,以及如何使用Jupyter Notebook和PyCharm等集成開發環境(IDE)進行基本操…

【論文閱讀】SegCLIP:用于高分辨率遙感圖像語義分割的多模態視覺語言和快速學習

【論文閱讀】SegCLIP:用于高分辨率遙感圖像語義分割的多模態視覺語言和快速學習 文章目錄【論文閱讀】SegCLIP:用于高分辨率遙感圖像語義分割的多模態視覺語言和快速學習一、介紹二、聯系工作三、方法四、實驗結果**數據集**SegCLIP: Multimodal Visual-…

Anaconda、OpenCV安裝配置方法

目錄 1.Anaconda安裝 1.1 國內鏡像軟件下載 1.2 點擊exe,一路下一步安裝 1.3 檢查安裝情況 1.3.1 安裝前后系統環境變量變化對比 1.3.2 查看安裝路徑和版本 1.4 Anaconda自帶的python版本查看命令如下: 1.5 修改鏡像地址,加快下載包的…

C++函數繼承

C函數繼承引言C三大特征分別為封裝,繼承和多態,它們構成了面向對象編程的基石,它們協同工作以提升代碼的模塊化,可復用性和靈活性封裝:提高代碼的維護性(當程序出現問題時可以準確定位)繼承&…