【微服务部署】一、使用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.2
    restart: always
    ports:
      - "5433:5432"
    networks:
      - prodnetwork
    volumes:
      - /data/docker/ci/postgresql:/var/lib/postgresql
      - /data/docker/ci/postgresql/data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
      - POSTGRES_DB=sonar
      - TZ=Asia/Shanghai
  sonar:
    image: sonarqube:10.1.0-community
    restart: always
    ports:
    - "19000:9000"
    - "19092:9092"
    networks:
      - prodnetwork
    depends_on:
      - sonardb
    volumes:
      - /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-plugins
    environment:
      - TZ=Asia/Shanghai
      - SONARQUBE_JDBC_URL=jdbc:postgresql://sonardb:5432/sonar
      - SONARQUBE_JDBC_USERNAME=sonar
      - SONARQUBE_JDBC_PASSWORD=sonar
  jenkins:
    image: jenkins/jenkins:lts
    user: root
    privileged: true
    restart: always
    ports:
      - "18080:8080"
    networks:
      - prodnetwork
    volumes:
      - /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_home
    depends_on:
      - sonar
    environment:
      - TZ=Asia/Shanghai
      - NEXUS_PORT=8081
      - SONAR_PORT=9000
      - SONAR_DB_PORT=5432
      - JAVA_OPTS=-Xms512m -Xmx10240m
    deploy:
      resources:
         limits:
            cpus: "2.00"
            memory: 10G
         reservations:
            memory: 200M
    cap_add:
      - ALL

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

  nexus:
    image: sonatype/nexus3
    restart: always
    ports:
      - "18081:8081"
    networks:
      - prodnetwork
    volumes:
      - /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/data

chmod -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 required
	at hudson.PluginWrapper.resolvePluginDependencies(PluginWrapper.java:1016)
	at hudson.PluginManager.dynamicLoad(PluginManager.java:917)
Caused: java.io.IOException: Failed to install github-branch-source plugin
	at hudson.PluginManager.dynamicLoad(PluginManager.java:930)
	at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:2179)
Caused: java.io.IOException: Failed to dynamically deploy this plugin
	at 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机项目(7)——基于51单片机的温湿度测量仿真

本次做的设计,是利用DHT11传感器,测量环境的温度以及湿度,同时具备温度报警的功能:利用两个按键,设置温度阈值的加和减,当所测温度大于温度阈值的时候,蜂鸣器就会响起,进行报警提示。…

C语言深入理解指针(非常详细)(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子(strlen函数的实现&a…

java反编译工具jd-gui使用

文章目录 一、JD-GUI介绍二、下载三、安装四、使用教程五、免责声明摘抄 一、JD-GUI介绍 JD-GUI是一个独立的图形实用程序,显示“.class”文件的Java源代码。 使用JD-GUI浏览重构的源代码,以便即时访问方法和字段。 二、下载 MAC安装包:ht…

链路聚合原理

文章目录 一、定义二、功能三、负载分担四、分类五、常用命令 首先可以看下思维导图,以便更好的理解接下来的内容。 一、定义 在网络中,端口聚合是一种将连接到同一台交换机的多个物理端口捆绑在一起,形成一个逻辑端口的技术。通过端口聚合&…

在 Spring Boot 中集成 MinIO 对象存储

MinIO 是一个开源的对象存储服务器,专注于高性能、分布式和兼容S3 API的存储解决方案。本文将介绍如何在 Spring Boot 应用程序中集成 MinIO,以便您可以轻松地将对象存储集成到您的应用中。 安装minio 拉取 minio Docker镜像 docker pull minio/minio创…

解决 .csv 文件上传到 pgsql 的字符报错问题

目录 背景问题解决办法 背景 上传 .csv 文件进行数据导入到 pg 时,报错显示如下: ods.tbl_inp_fee_detail.csv数据上传失败 报错信息:org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Where: C…

多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比

多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比 目录 多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比 模型描述 M…

【python爬虫】10.指挥浏览器自动工作(selenium)

文章目录 前言selenium是什么怎么用设置浏览器引擎获取数据解析与提取数据自动操作浏览器 实操运用确认目标分析过程代码实现 本关总结 前言 上一关,我们认识了cookies和session。 分别学习了它们的用法,以及区别。 还做了一个项目:带着小…

Redis集群操作-----主从互换

一、将节点cluster1的主节点7000端口的redis关掉 [rootredis-cluster1 src]# ps -ef |grep redis 二、查看集群信息:

SpringBoot复习:(60)文件上传的自动配置类MultipartAutoConfiguration

可以看到,定义了一个类型为StandartServletMultipartResolver的bean 用来进行文件上传,定义了一个类型为MultipartConfigElement的bean用来进行上传相关的配置,其中使用了MultipartProperties中的属性,这个类的定义如下&#xff1…

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早,使用的OS比较过时,还是centos6.5的系统,因国产化需要,需将该系统升级到BClinux 8.6,但官方显示不支持centos 6.x升级到8,需先将centos6.5升级到centos7的最新版&#xff0c…

ZDH-权限模块

本次介绍基于ZDH v5.1.2版本 目录 项目源码 预览地址 安装包下载地址 ZDH权限模块 ZDH权限模块-重要名词划分 ZDH权限模块-菜单管理 ZDH权限模块-角色管理 ZDH权限模块-用户配置 ZDH权限模块-权限申请 项目源码 zdh_web: GitHub - zhaoyachao/zdh_web: 大数据采集,抽…

高频面试题:如何分别用三种姿势实现三个线程交替打印0到100

最近面试遇到的一道题,需要三个线程交替打印0-100,当时对多线程并不是很熟悉因此没怎么写出来,网上搜了之后得到现 synchronized wait/notifyAll 实现思路:判断当前打印数字和线程数的取余,不等于当前线程则处于等待…

ORB-SLAM3复现过程中遇到的问题及解决办法

在复现过程中遇到的问题的解决过程 1. 版本检查1.1 Opencv版本的检测1.2 Eigen版本的检测1.3 查看Python版本1.4 其他 2. 编译过程中遇到的问题及解决办法2.1 ./build.sh遇到的问题2.2 ./build_ros.sh遇到的问题 因为环境比较干净,所以遇到的问题相对少一些&#xf…

多线程的五种“打开”方式

1 概念 1.1 线程是什么?? 线程(Thread)是计算机科学中的一个基本概念,它是进程(Process)中的一个执行单元,负责执行程序的指令序列。线程是操作系统能够进行调度和执行的最小单位。…

MariaDB数据库服务器

目录 一、什么是数据库? 二、什么是关系型数据库? 三、数据库字符集和排序规则是什么? 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库? 数据库(DB)是以一定方式长期存储在计算机硬盘内…

PHP8内置函数中的数学函数-PHP8知识详解

php8中提供了大量的内置函数,以便程序员直接使用常见的内置函数包括数学函数、变量函数、字符串函数、时间和日期函数等。今天介绍内置函数中的数学函数。 本文讲到了数学函数中的随机数函数rand()、舍去法取整函数floor()、向上取整函数 ceil()、对浮点数进行四舍…

1.频偏估计算法

目录 整数倍频偏估计方法 小数倍频偏估计方法 使用CP进行频偏估计 使用SSB进行频偏估计 OFDM对频偏比较敏感,频偏会影响子载波的正交性,造成载波间干扰。频偏对PRACH相关计算峰值的影响本质上是子载波间干扰导致的。时域检测:首先对接收…

聚合多个电商API接口平台

API接口测试(点击免费测试) 随着数字化商业时代的到来,API接口已成为电商资源连接利器,也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示,全球互联网企业近3/4的企业持续投入数字化转型&#xff0c…

最佳实践:TiDB 业务读变慢分析处理

作者:李文杰 网易游戏计费 TiDB 负责人 在使用或运维管理 TiDB 的过程中,大家几乎都遇到过 SQL 变慢的问题,尤其是查询相关的读变慢问题。读变慢的问题大部分情况下都遵循一定的规律,通过经验的积累可以快速的定位和优化&#xff…