【微服务部署】一、使用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,通过提示的路径找到初始密码并输入,然后进行下一步
复制代码
[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版本


9、然后安装所需插件,系统管理 > 插件管理
10、系统管理 > 系统配置
  • Maven参数配置,此处根据自己服务器的配置情况配置

    -Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=64m

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

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

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

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

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

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

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

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

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

相关推荐
qq_364371728 小时前
基于 Docker 容器化环境配置
运维·docker·容器
GentleDevin9 小时前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记9 小时前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
心机之蛙qee10 小时前
docker的安装(RHEL9)
运维·docker·容器
炸炸鱼.10 小时前
Docker 高级管理 —— 容器通信技术与数据持久化
docker
乐hh11 小时前
DM8配置SSL
数据库·docker·ssl
极客先躯11 小时前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点
凤舞飘伶11 小时前
windows安装docker-desk
windows·docker·容器
运维全栈笔记12 小时前
Docker一键部署Immich:自建私有云相册,照片视频备份无忧
linux·服务器·网络·docker·容器
bukeyiwanshui14 小时前
20260508 docker教案
运维·docker·容器