【微服务部署】一、使用docker-compose部署Jenkins、SonarQube、PostgreSQL

一、安装

1、编写docker-compose部署Postgres、SonarQube、Jenkins的yml文件jenkins-compose.yml
  • Postgres:作为SonarQube的数据库存储
  • SonarQube:代码质量检查
  • Jenkins:jenkins/jenkins:lts镜像,jenkinsci/blueocean镜像缺少node运行时环境,导致node无法运行。
关键配置说明( 宿主机 : Docker容器):
  • /data/docker/ci/postgresql/data:/var/lib/postgresql/data # Postgres数据存储映射到宿主机目录
  • /etc/localtime:/etc/localtime:ro # docker容器取宿主机的日期,:ro(read-only)表示只读,即docker容器只能读取宿主机的/etc/localtime文件,不能修改。
  • /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 # 在docker容器中运行宿主机docker命令,如果宿主机没有这个文件,可以使用以下命令进行安装。
  • 这里将Docker容器的内存设置为10G,因为我们NodeJS打包需要设置的内存为8G。
yum install libtool-ltdl-2.4.2-22.el7_3.x86_64

jenkins-compose.yml完整内容如下:

version: '3'
networks:prodnetwork:driver: bridge
services:sonardb:image: postgres:12.2restart: alwaysports:- "5433:5432"networks:- prodnetworkvolumes:- /data/docker/ci/postgresql:/var/lib/postgresql- /data/docker/ci/postgresql/data:/var/lib/postgresql/data- /etc/localtime:/etc/localtime:roenvironment:- POSTGRES_USER=sonar- POSTGRES_PASSWORD=sonar- POSTGRES_DB=sonar- TZ=Asia/Shanghaisonar:image: sonarqube:10.1.0-communityrestart: alwaysports:- "19000:9000"- "19092:9092"networks:- prodnetworkdepends_on:- sonardbvolumes:- /data/docker/ci/sonarqube/conf:/opt/sonarqube/conf- /data/docker/ci/sonarqube/data:/opt/sonarqube/data- /data/docker/ci/sonarqube/logs:/opt/sonarqube/logs- /data/docker/ci/sonarqube/extensions:/opt/sonarqube/extensions- /data/docker/ci/sonarqube/bundled-plugins:/opt/sonarqube/lib/bundled-pluginsenvironment:- TZ=Asia/Shanghai- SONARQUBE_JDBC_URL=jdbc:postgresql://sonardb:5432/sonar- SONARQUBE_JDBC_USERNAME=sonar- SONARQUBE_JDBC_PASSWORD=sonarjenkins:image: jenkins/jenkins:ltsuser: rootprivileged: truerestart: alwaysports:- "18080:8080"networks:- prodnetworkvolumes:- /usr/bin/docker:/usr/bin/docker- /var/run/docker.sock:/var/run/docker.sock- /etc/docker/daemon.json:/etc/docker/daemon.json- /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7- /etc/localtime:/etc/localtime:ro- $HOME/.ssh:/root/.ssh- /data/docker/ci/jenkins/lib:/var/lib/jenkins/- /data/docker/ci/jenkins/home:/var/jenkins_homedepends_on:- sonarenvironment:- TZ=Asia/Shanghai- NEXUS_PORT=8081- SONAR_PORT=9000- SONAR_DB_PORT=5432- JAVA_OPTS=-Xms512m -Xmx10240mdeploy:resources:limits:cpus: "2.00"memory: 10Greservations:memory: 200Mcap_add:- ALL

  因并不是每个项目都需要自己的Maven私服,所以这里去除了Maven私服Nexus的部署,如果需要,直接在jenkins-compose.yml文件中添加即可:

  nexus:image: sonatype/nexus3restart: alwaysports:- "18081:8081"networks:- prodnetworkvolumes:- /data/docker/ci/nexus:/nexus-data

  在Jenkins的depends_on:添加

    depends_on:- nexus- sonar
2、创建宿主机挂载目录并赋权
mkdir -p /data/docker/ci/nexus /data/docker/ci/jenkins/lib /data/docker/ci/jenkins/home /data/docker/ci/sonarqube /data/docker/ci/postgresql /data/docker/ci/postgresql/datachmod -R 777 /data/docker/ci/nexus /data/docker/ci/jenkins/lib /data/docker/ci/jenkins/home /data/docker/ci/sonarqube /data/docker/ci/postgresql /data/docker/ci/postgresql/data
3、在 jenkins-compose.yml 文件所在目录下执行安装启动命令
  • 启动命令
docker-compose -f jenkins-compose.yml up -d
  • 停止命令
docker-compose -f jenkins-compose.yml down
  • 重新创建某一个容器命令
docker-compose -f jenkins-compose.yml up --force-recreate --no-deps 服务名称
  • 查看容器运行情况
[root@root server]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS        PORTS                                              NAMES
b28f1878ee08   jenkins/jenkins:lts          "/sbin/tini -- /usr/…"   20 hours ago   Up 19 hours   50000/tcp, 0.0.0.0:18080->8080/tcp                 docker-jenkins-1
cff7c0d88150   sonarqube:10.1.0-community   "/opt/sonarqube/dock…"   20 hours ago   Up 20 hours   0.0.0.0:19000->9000/tcp, 0.0.0.0:19092->9092/tcp   docker-sonar-1
90dacc85efb1   postgres:12.2                "docker-entrypoint.s…"   20 hours ago   Up 20 hours   0.0.0.0:5433->5432/tcp                             docker-sonardb-1
  • 查看某一容器的运行日志 docker logs -f 容器id
[root@root server]# docker logs -f b28f1878ee08
  • 重启某一容器 docker restart 容器id
[root@root server]# docker restart  b28f1878ee08
4、通过界面访问Jenkins,通过提示的路径找到初始密码并输入,然后进行下一步

Jenkins初始界面

[root@ZvRiIw4706 docker]# cd /data/docker/ci/jenkins/home/secrets
[root@ZvRiIw4706 secrets]# ls
filepath-filters.d  initialAdminPassword  jenkins.model.Jenkins.crumbSalt  master.key  org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY  slave-to-master-security-kill-switch  whitelisted-callables.d
[root@ZvRiIw4706 secrets]# cat initialAdminPassword
5、选择安装推荐插件即可

推荐插件

6、插件安装中

插件安装中

7、部分插件安装失败,根据后台日志可知,部分插件因为jenkins版本太低,所以不能安装,这里先进行下一步,在系统中升级jenkins版本之后,再继续安装插件。(jenkins/jenkins:lts镜像里面集成的不是最新的jenkins,但在下载插件时,是下载的最新的插件,导致不兼容,所以无法下载)

安装失败

报错日志:

2023-08-09 07:44:36.664+0000 [id=72]	INFO	h.m.UpdateCenter$UpdateCenterConfiguration#download: Downloading github-branch-source
2023-08-09 07:44:36.685+0000 [id=72]	SEVERE	h.model.UpdateCenter$DownloadJob#run: Failed to install github-branch-source
java.io.IOException: Failed to load: GitHub Branch Source Plugin (1696.v3a_7603564d04)- Failed to load: GitHub plugin (1.34.5)- Jenkins (2.346.1) or higher requiredat hudson.PluginWrapper.resolvePluginDependencies(PluginWrapper.java:1016)at hudson.PluginManager.dynamicLoad(PluginManager.java:917)
Caused: java.io.IOException: Failed to install github-branch-source pluginat hudson.PluginManager.dynamicLoad(PluginManager.java:930)at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:2179)
Caused: java.io.IOException: Failed to dynamically deploy this pluginat hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:2183)at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1846)at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:121)at java.base/java.lang.Thread.run(Thread.java:829)

二、配置

8、登录到Jenkins之后,首先进入系统管理然后升级Jenkins版本

升级Jenkins
升级Jenkins

9、然后安装所需插件,系统管理 > 插件管理
  • Blue Ocean :Jenkins Pipeline设计的一个聚合工具,图形化Pipeline的流程,使流水线更加直观。
  • SonarQube Scanner for Jenkins:代码质量扫描工具,Jenkins扫描代码后将结果发送到SonarQube Server。
  • NodeJS Plugin :打包NodeJs项目时,需要的插件,用于运行NodeJs环境。
  • Maven Integration plugin:Maven工程打包插件。
  • Publish Over SSH:将打包后的文件,发送到远程服务器。
10、系统管理 > 系统配置
  • Maven参数配置,此处根据自己服务器的配置情况配置
-Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=64m

Maven参数

  • SonarQube servers配置,此处配置我们使用docker-compose部署的SonarQube,Server authentication token必填,这个在后续步骤会说明如何从SonarQube获取生成token。
    SonarQube servers
  • Publish over SSH配置,这里配置我们需要部署到的服务器,可以部署多个。点击下侧的“高级”,填写服务器密码和端口。
    Publish over SSH
11、系统管理 > 全局工具配置,这里主要安装一些所需插件需要的软件环境,jenkins/jenkins:lts镜像默认装有openjdk和git,如果没有特殊要求,我们可以不安装,我们在这里安装SonarQube Scanner、Maven、NodeJS。
  • SonarQube Scanner安装
    SonarQube Scanner安装

  • Maven安装,最好自己下载后上传到服务器,因为使用服务器下载安装很慢。
    Maven安装

  • Maven全局配置,配置Maven的配置文件
    Maven全局配置

  • 修改Maven全局配置中配置文件里面的jar包存储路径,否则不同任务构建都会重新下载jar包。
    jar包存储路径

  • NodeJS安装,选择自己所需要的版本,同时如果有其他工具包可以在下方填写,比如我们使用的是pnpm,使用的镜像源是https://registry.npm.taobao.org ,可以在下方填写:

pnpm -registry=https://registry.npm.taobao.org

NodeJS安装

GitEgg-Cloud是一款基于SpringCloud整合搭建的企业级微服务应用开发框架,开源项目地址:

Gitee: https://gitee.com/wmz1930/GitEgg

GitHub: https://github.com/wmz1930/GitEgg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 filezilla 连接服务器失败问题

问题描述: 开始一直用的 XFTP 后来,它变成收费软件了,所以使用filezilla 代替 XFTP 之前用的还好好的,今天突然就报错了:按要求输入相关字段,连接 连接失败!!!o(╥﹏╥…

使用 BERT 进行文本分类 (03/3)

一、说明 在使用BERT(2)进行文本分类时,我们讨论了什么是PyTorch以及如何预处理我们的数据,以便可以使用BERT模型对其进行分析。在这篇文章中,我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …

友元(个人学习笔记黑马学习)

1、全局函数做友元 #include <iostream> using namespace std; #include <string>//建筑物类 class Building {//goodGay全局函数是 Building好朋友 可以访问Building中私有成员friend void goodGay(Building* building);public:Building() {m_SittingRoom "…

信息熵 条件熵 交叉熵 联合熵 相对熵(KL散度) 互信息(信息增益)

粗略版快速总结 条件熵 H ( Q ∣ P ) 联合熵 H ( P , Q ) − H ( P ) 条件熵H(Q∣P)联合熵H(P,Q)−H(P) 条件熵H(Q∣P)联合熵H(P,Q)−H(P) 信息增益 I ( P , Q ) H ( P ) − H ( P ∣ Q ) H ( P ) H ( Q ) − H ( P , Q ) 信息增益 I(P,Q)H(P)−H(P∣Q)H(P)H(Q)-H(P,Q) 信息…

企业架构LNMP学习笔记10

1、Nginx版本&#xff0c;在实际的业务场景中&#xff0c;需要使用软件新版本的功能、特性。就需要对原有软件进行升级或重装系统。 Nginx的版本需要升级迭代。那么如何进行升级呢&#xff1f;线上服务器如何升级&#xff0c;我们选择稳定版本。 从nginx的1.14版本升级到ngin…

Linux系统中驱动入门设备树DTS(经典)

设备树&#xff08;DTS:device tree source&#xff09;&#xff0c;字面意思就是一块电路板上设备如上图中CPU、DDR、I2C、GPIO、SPI等&#xff0c;按照树形结构描绘成的一棵树。按照策略和功能分离的思路&#xff0c;就是驱动代码&#xff08;功能&#xff09;和设备树DTS配置…

IIR滤波器

IIR滤波器原理 IIR的特点是&#xff1a;非线性相位、消耗资源少。 IIR滤波器的系统函数与差分方程如下所示&#xff1a; 由差分方程可知IIR滤波器存在反馈&#xff0c;因此在FPGA设计时要考虑到有限字长效应带来的影响。差分方程中包括两个部分&#xff1a;输入信号x(n)的M节…

Git中smart Checkout与force checkout

Git中smart Checkout与force checkout 使用git进行代码版本管理,当我们切换分支有时会遇到这样的问题&#xff1a; 这是因为在当前分支修改了代码&#xff0c;但是没有commit,所以在切换到其他分支的时候会弹出这个窗口&#xff0c; 提示你选force checkout或者smart checko…

Redis缓存和持久化

目录 Redis缓存 什么是缓存 缓存更新策略​编辑 业务场景 缓存穿透 常见的解决方案 缓存雪崩 解决方案 缓存击穿 解决方案 Redis持久化 RDB持久化 执行时机 RDB方式bgsave的基本流程 AOF持久化 RDB和AOF的对比​编辑 Redis主从 数据同步原理 总结 Redis缓存 …

2、Nginx 安装

文章目录 2、Nginx 安装2.1 官网下载2.2 安装 nginx2.2.1 第一步2.2.2 第二步2.2.3 第三步&#xff0c;安装 nginx2.2.4 第四步&#xff0c;修改防火漆规则 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达&#xff1b;言不信者行不果。 2、Nginx 安装 2.1 官网下载 nginx…

iOS - 资源按需加载 - ODR

一、瘦身技术大图 二、On-Demand Resources 简介 将其保存管理在苹果的服务器&#xff0c;按需使用资源、优化包体积&#xff0c;实现更小的应用程序。ODR 的好处&#xff1a; 应用体积更小&#xff0c;下载更快&#xff0c;提升初次启动速度资源会在后台下载操作系统将会在磁…

openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍

文章目录 openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍59.1 数据库59.2 表空间59.3 模式59.4 用户和角色59.5 事务管理 openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍 59.1 数据库 数据库用于管理各类数据对象&#xff0c;与其他数据库隔离。创建数据…

【数据结构】树和二叉树的概念及结构(一)

目录 一&#xff0c;树的概念及结构 1&#xff0c;树的定义 2&#xff0c;树结点的分类及关系 3&#xff0c;树的表示 二&#xff0c;二叉树的概念及结构 1&#xff0c;二叉树的定义 2&#xff0c;特殊的二叉树 3&#xff0c;二叉树的性质 4&#xff0c;二叉树的存储结构 1&…

无涯教程-Android Intent Standard Extra Data函数

下表列出了各种重要的Android Intent Standard Extra Data。您可以查看Android官方文档以获取额外数据的完整列表- Sr.NoExtra Data & Description1 EXTRA_ALARM_COUNT 用作AlarmManager intents(意图)中的int Extra字段,以告诉正在调用的应用程序intents(意图)释放了多少…

【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2&…

2.4 关系数据库

思维导图&#xff1a; 前言&#xff1a; 这段话描述了“关系数据库”及其背后的理论基础。首先&#xff0c;我们来拆分这段话并逐步解释每部分。 关系数据库是采用关系模型作为数据组织方式的数据库。 这句话的关键是“关系模型”。关系模型是一种表示和操作数据库的理论模型…

操作系统清华同步笔记:定义概述+计算机内存和硬盘布局+启动流程顺序+中断、异常和系统调用

定义概述 从用户角度来看&#xff0c;操作系统是一个控制软件&#xff0c;用以管理应用程序&#xff0c;为应用程序提供服务&#xff0c;杀死应用程序等。从内部文件角度来看&#xff0c;操作系统是一个资源管理器&#xff0c;用以管理外设&#xff0c;分配资源。层次结构&…

命令行编译VS工程

先输入以下命令&#xff0c;因为命令出错了&#xff0c;就会弹出帮助&#xff0c;如下&#xff1a; "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" /help 反正就是Microsoft Visual Studio 的安装路径。 帮助界面如下&#xff1a…

core dump管理在linux中的前世今生

目录 一、什么是core dump&#xff1f; 二、coredump是怎么来的&#xff1f; 三、怎么限制coredump文件的产生&#xff1f; ulimit 半永久限制 永久限制 四、从源码分析如何对coredump文件的名字和路径管理 命名 管理 一些问题的答案 1、为什么新的ubuntu不能产生c…

java设计模式---策略模式

策略模式的定义 策略设计模式是一种行为设计模式。当在处理一个业务时&#xff0c;有多种处理方式&#xff0c;并且需要再运行时决定使哪一种具体实现时&#xff0c;就会使用策略模式。 策略模式的类图&#xff1a; 策略模式的实现 在支付业务中&#xff0c;有三种付款方式&…