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.mzph.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:…