jenkins應用2

1.jenkins應用

1.jenkins構建的流程

1.使用git參數化構建,用標簽區分版本

2.git 拉取gitlab遠程倉庫代碼

3.maven打包項目

4.sonarqube經行代碼質量檢測

5.自定義制作鏡像發送到遠程倉庫harbor

6.在遠程服務器上拉取代碼啟動容器

這個是構建的整個過程和步驟,需要安裝好gitlab,jenkins 、harbor、sonarqube

2jenkins用到的軟件及環境配置

上一章講述了gitlab 和jenkins的容器化搭建,接著將Jenkins容器使用docker

?docker 的進程/run/docker.sock 共享給jenkins使用,默認docker.sock 的屬主是root,屬組是docker,

#1修改docker權限
chown root:root /run/docker.sock   #修改屬主和屬組
chmod o+rwx /run/docker.sock       #增加權限#2添加harbor倉庫
cat >/etc/docker/daemon.json<<EOF
{"insecure-registries": ["http://192.168.88.121:80"]    #指定遠程倉庫,后邊使用改成harbor的#IP和端口
}
EOF
systemctl restart docker  #重啟docker生效#3.配置jenkins使用docker
cat >/usr/local/docker/jenkins_docker/docker-compose.yaml<<EOF
version: '3.1'
services:jenkins:image: "jenkins/jenkins:2.387.3-lts"container_name: jenkinsrestart: alwaysports:- '8080:8080'- '50000:50000'volumes:- './data:/var/jenkins_home/'- '/var/run/docker.sock:/var/run/docker.sock'        #共享docker- '/usr/bin/docker:/usr/bin/docker'                  #添加docker到bin直接使用命令- '/etc/docker/daemon.json:/etc/docker/daemon.json'  #共享遠程倉庫
EOF
cd  /usr/local/docker/jenkins_docker/
docker compose -f  /usr/local/docker/jenkins_docker/docker-compose.yaml up -d  #重新創建jenkins

3.harbor倉庫搭建

1.harbor軟件下載與配置

wget -t 0 -c??https://github.com/goharbor/harbor/releases/download/v2.0.5/harbor-offline-installer-v2.0.5.tgz

#harbor的配置,默認用戶名admin,密碼Harbor12345
#配置完harbor后,登錄到harbor,創建目錄repo
#!/bin/bash
tar -xf harbor-offline-installer-v2.0.5.tgz 
cd harbor/
cp harbor.yml.tmpl harbor.yml
sed -i  '/^hostname/s,reg.mydomain.com,192.168.88.121,'  harbor.yml #指定harbor的IP地址
sed -i  '/^https:/s,^,#,'  harbor.yml
sed -i  '/port: 443/s,^,#,'  harbor.yml
sed -i  '/ certificate/s,^,#,'  harbor.yml
sed -i  '/private_key/s,^,#,'  harbor.yml
sudo curl -L "https://github.com/docker/compose/releases/download/1.18.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
./install.sh                #安裝harbor
cd ../

http://192.168.88.121:80

harbor的配置,默認用戶名admin,密碼Harbor12345
配置完harbor后,登錄到harbor,創建目錄repo,公開

4.sonarqube下載原裝

1.sonarqube采用容器部署

mkdir  /usr/local/docker/sonarqube_docker
cd  /usr/local/docker/sonarqube_docker
cat >docker-compose.yaml<<EOF
version: '3.1'
services:db:image: postgrescontainer_name: dbports:- 5432:5432networks:- sonarnetenvironment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarsonarqube:image: sonarqube:8.9.6-communitycontainer_name: sonarqubedepends_on:- dbports:- 9000:9000networks:- sonarnetenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonar
networks:sonarnet:driver: bridge
EOF
grep -i 'vm.max_map_count'   /etc/sysctl.conf
[ $? -eq 0 ] || sed -i  '$a vm.max_map_count=262144 '  /etc/sysctl.conf #不配置會報錯
sysctl -p
docker compose -f docker-compose.yaml  up -d
#localhost:9000
#sonarqube默認用戶名和密碼都是admin 

http://localhost:9000
2.sonarqube默認用戶名和密碼都是admin ,進去后會提示修改密碼

3.保存好tocker,jenkins驗證用到

5.sonar-sconner下載配置到jenkins

SonarScanner CLI (sonarsource.com)

1下載sonar-scanner-cli-4.6.0.2311-linux.zip

2.conf/sonar-scanner.properties配置

#!/bin/bash
unzip ~/sonar-scanner-cli-4.6.0.2311-linux.zip
mv sonar-scanner-4.6.0.2311-linux/ sonar-scannercat >sonar-scanner/conf/sonar-scanner.properties <<EOF
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here#----- Default SonarQube server
sonar.host.url=http://192.168.88.121:9000  #指定IP及單口#----- Default source code encoding
sonar.sourceEncoding=UTF-8
EOFmv sonar-scanne   /usr/local/docker/jenkins_docker/data/  #放入到jenins目錄下,和JDK、maven一樣

6jenkins登錄進去

1、插件安裝sonar

2.sonar-scanner全局變量配置

3.sonar-scanner系統配置

7項目構建

1新建項目test

2.git參數化構建

3.2個文本參數構建

4.git拉取代碼

5.清空之前的workspace及切換標簽版本

6.maven打包

7sonar代碼質量檢測

sonar.projectname=${JOB_NAME} #指定項目名
sonar.projectKey=${JOB_NAME}? ? #指定Key
sonar.source=./? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #在當前目錄對代碼檢測
sonar.java.binaries=target/? ? ? ? ? ? ? #jar包

7.制作鏡像并上傳到遠程倉庫harbor

mv target/*.jar  docker/
cd docker/
docker build -t ${JOB_NAME}:$tag ./
docker login -u admin -p Harbor12345 192.168.88.121:80
docker tag ${JOB_NAME}:$tag 192.168.88.121:80/repo/${JOB_NAME}:$tag
docker push 192.168.88.121:80/repo/${JOB_NAME}:$tag

8.構建后在遠程服務器下載鏡像啟動容器進行測試

#1.在遠程服務器執行的shell命令
docker.sh 192.168.88.121:80 repo ${JOB_NAME}  $tag  $container_port  $host_port#2.腳本docke.sh 在遠程服務器/usr/local/bin/docker.sh
cat >/usr/local/bin/docker.sh<<EOF
#!/bin/bash
horbar_addr=$1     #harbor鏡像地址及端口
horbar_repo=$2     #鏡像所在的目錄為repo
project=$3         #項目名稱所謂鏡像名
version=$4         #項目版本所聞鏡像版本
container_port=$5  #容器內使用的端口
host_port=$6       #宿主機使用的端口
imageName=$horbar_addr/$horbar_repo/$project:$version   #鏡像的地址及鏡像名和版本
echo $imageName
containerId=`docker ps -a  | awk '{print $1, $NF}'  | grep $project | awk '{print $1}'` #刪除當前正在運行的容器
echo $containerId
if [ "$containerId" != "" ] ; thenecho  "正在刪除${project}容器"#docker stop $containerIddocker rm -f $containerId
fi
tag=`docker images | grep ${project} | awk '{print $2}'`
echo $tag
if [[ "$tag" =~ "$version" ]] ; thendocker rmi -f $imageName
fi
docker login -u admin -p Harbor12345 $horbar_addr
docker pull $imageName  #下載鏡像
docker run -d -p $host_port:$container_port --name $project $imageName  #啟動測試容器
echo "${project}容器創建成功" 
echo "SUCCESS"EOF

9.開始構建

8構建結果驗證

1.代碼質量檢測

2.查看容器是否正常運行

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

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

相關文章

C# 反射類Assembly 程序集(Assembly)用法

常見的兩種程序集&#xff1a; 可執行文件&#xff08;.exe文件&#xff09;和 類庫文件&#xff08;.dll文件&#xff09;。 在VS開發環境中&#xff0c;一個解決方案可以包含多個項目&#xff0c;而每個項目就是一個程序集。 他們之間是一種從屬關系&#xff0c;也就是說&…

java —— 匿名內部類與 Lambda 表達式

一、匿名內部類 匿名內部類是一種沒有名稱的類&#xff0c;多用于只使用一次的情況&#xff0c;本質上就是其所繼承的父類或接口的一個子類。 &#xff08;一&#xff09;繼承普通類的情況 public class Test{public void method(){System.out.println("通用方法"…

Python與Android連接:深入探索與實現

Python與Android連接&#xff1a;深入探索與實現 在現代移動應用開發領域&#xff0c;Python和Android的結合使用為開發者帶來了無限的可能性。這種跨平臺的組合不僅拓寬了開發者的視野&#xff0c;也極大地提升了應用的靈活性和可擴展性。本文將從四個方面、五個方面、六個方…

【NLP開發】Python實現聊天機器人(微信機器人)

&#x1f37a;NLP開發系列相關文章編寫如下&#x1f37a;&#xff1a;1&#x1f388;【小沐學NLP】Python實現詞云圖&#x1f388;2&#x1f388;【小沐學NLP】Python實現圖片文字識別&#x1f388;3&#x1f388;【小沐學NLP】Python實現中文、英文分詞&#x1f388;4&#x1…

轉讓北京電力施工總承包二級資質變更條件和流程

在電力工程領域&#xff0c;資質等級是企業能否參與競標、承接工程的重要標志之一。北京電力工程總包二級資質的轉讓&#xff0c;是指已經取得該資質的企業將其資質轉讓給需要的企業。這種轉讓是基于合作與共贏的原則&#xff0c;旨在推動電力工程行業健康、穩定發展&#xff0…

記錄使用自定義編輯器做試題識別功能

習慣了將解析寫在代碼注釋&#xff0c;這里就直接上代碼啦&#xff0c;里面用到的bxm-ui3組件庫是博主基于element-Plus做的&#xff0c;可以通過npm i bxm-ui3自行安裝使用 // 識別方法&#xff1a; // dom 當前識別數據所在區域, questionType 當前點擊編輯選擇的題目類型&a…

力扣刷題--LCR 135. 報數【簡單】

題目描述 實現一個十進制數字報數程序&#xff0c;請按照數字從小到大的順序返回一個整數數列&#xff0c;該數列從數字 1 開始&#xff0c;到最大的正整數 cnt 位數字結束。 示例 1: 輸入&#xff1a;cnt 2 輸出&#xff1a;[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1…

codeblock怎么編程:從入門到精通的全面指南

codeblock怎么編程&#xff1a;從入門到精通的全面指南 在數字化時代&#xff0c;編程已成為一項不可或缺的技能。Code::Blocks作為一款流行的開源集成開發環境&#xff08;IDE&#xff09;&#xff0c;為初學者和有經驗的開發者提供了強大的編程支持。那么&#xff0c;codebl…

C是結構化編程語言嗎:深度剖析與多維度解讀

C是結構化編程語言嗎&#xff1a;深度剖析與多維度解讀 在編程語言的浩瀚海洋中&#xff0c;C語言以其獨特的魅力占據著重要的地位。那么&#xff0c;C語言是否可以被歸類為結構化編程語言呢&#xff1f;這是一個值得深入探討的問題。本文將從四個方面、五個方面、六個方面和七…

Qt | Qt 資源簡介(rcc、qmake)

1、資源系統是一種獨立于平臺的機制,用于在應用程序的可執行文件中存儲二進制文件(前面所討論的數據都存儲在外部設備中)。若應用程序始終需要一組特定的文件(比如圖標),則非常有用。 2、資源系統基于 qmake,rcc(Qt 的資源編譯器,用于把資源轉換為 C++代碼)和 QFile …

java—MyBatis框架

簡介 什么是 MyBatis&#xff1f; MyBatis 是一款優秀的持久層框架&#xff0c;它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO&…

軟件公司為什么必須要使用低代碼系統?

在當今軟件行業全國比較內卷的大環境下&#xff0c;軟件公司面臨著前所未有的挑戰。為了在這個競爭激烈的市場中生存并脫穎而出&#xff0c;馳騁低代碼設計者認為&#xff0c;軟件公司必須要使用低代碼系統。以下是幾個關鍵的原因&#xff1a; 時代發展的必然選擇 低代碼系統是…

領導力中的說服藝術

本文主要介紹了亞里士多德修辭三角理論&#xff0c;即演講者在說服聽眾時如何運用品格&#xff08;Ethos&#xff09;、情感&#xff08;Pathos&#xff09;和邏輯&#xff08;Logos&#xff09;三種基本的修辭手法。原文: The Art of Persuasion in Leadership 亞里士多德的說…

Kubernetes面試題分享

目錄 前言 1.Kubernetes的控制平面包括哪些核心組件&#xff1f;它們各自的作用是什么&#xff1f; 2.Kubernetes的數據平面涉及哪些組件&#xff1f;它們如何協作&#xff1f; 3.什么是Pod&#xff1f;為什么它是Kubernetes的基本單元&#xff1f; 4.Service如何實現服務…

【自動駕駛技術】自動駕駛汽車AI芯片匯總——地平線篇

0. 前言 按照國際慣例&#xff0c;首先聲明&#xff1a;本文只是我自己學習的理解&#xff0c;雖然參考了他人的寶貴見解及成果&#xff0c;但是內容可能存在不準確的地方。如果發現文中錯誤&#xff0c;希望批評指正&#xff0c;共同進步。 本篇文章是這個系列的第二篇&#x…

[AIGC] DAG任務調度的概述與實踐

DAG(Directed Acyclic Graph&#xff0c;有向無環圖)作為任務調度的基礎模型&#xff0c;在大規模數據處理和計算過程中有著廣泛的應用。本文將對DAG模型的原理進行解釋并列出一些常用的任務調度工具。 文章目錄 一、什么是DAG&#xff1f;二、DAG任務調度的原理三、常用的DAG任…

50個常用的Docker命令及如何使用

這里整理了50個常用的Docker命令以及每個命令的使用方法。 docker version:顯示Docker版本信息。 示例:docker version docker info:顯示Docker系統信息。 示例:docker info docker pull <image>:從Docker Hub下載鏡像。 示例:docker pull ubuntu docker run <i…

spring xml配置文件中的bean標簽屬性

概述 在Spring框架中&#xff0c; 標簽用于定義和配置 Spring 容器管理的對象&#xff08;即 bean&#xff09;。 標簽有許多屬性&#xff0c;每個屬性都用來配置 bean 的特定方面。下面是一些主要屬性及其默認值的詳細說明。 屬性 1 id 說明: 用于標識 bean 的唯一標識符。…

一文帶你了解python

一文帶你了解python 簡單介紹 python是腳本語言,不需要在使用變量前進行聲明,代碼不需要編譯,由解釋器來解釋執行。python簡潔的語法可以讓你寫出比靜態語言更短的程序。使用交互式解釋器時,會自動打印輸入的一些包含值的東西;在非交互式的程序中,需要使用print函數打印…

Python獲取文件MD5值方法

Python的標準庫中提供了一個名為hashlib的模塊&#xff0c;可以用來生成MD5值。 下面是兩個方法的實現&#xff1a; 1. 通過文件路徑獲取MD5值&#xff1a; import hashlibdef calculate_md5_file(file_path):md5 hashlib.md5()with open(file_path, "rb") as f:…