【微服務(wù)部署】一、使用docker-compose部署Jenkins、SonarQube、PostgreSQL

一、安裝

1、編寫(xiě)docker-compose部署Postgres、SonarQube、Jenkins的yml文件jenkins-compose.yml
  • Postgres:作為SonarQube的數(shù)據(jù)庫(kù)存儲(chǔ)
  • SonarQube:代碼質(zhì)量檢查
  • Jenkins:jenkins/jenkins:lts鏡像,jenkinsci/blueocean鏡像缺少node運(yùn)行時(shí)環(huán)境,導(dǎo)致node無(wú)法運(yùn)行。
關(guān)鍵配置說(shuō)明( 宿主機(jī) : Docker容器):
  • /data/docker/ci/postgresql/data:/var/lib/postgresql/data # Postgres數(shù)據(jù)存儲(chǔ)映射到宿主機(jī)目錄
  • /etc/localtime:/etc/localtime:ro # docker容器取宿主機(jī)的日期,:ro(read-only)表示只讀,即docker容器只能讀取宿主機(jī)的/etc/localtime文件,不能修改。
  • /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 # 在docker容器中運(yùn)行宿主機(jī)docker命令,如果宿主機(jī)沒(méi)有這個(gè)文件,可以使用以下命令進(jìn)行安裝。
  • 這里將Docker容器的內(nèi)存設(shè)置為10G,因?yàn)槲覀僋odeJS打包需要設(shè)置的內(nèi)存為8G。
yum install libtool-ltdl-2.4.2-22.el7_3.x86_64

jenkins-compose.yml完整內(nèi)容如下:

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

??因并不是每個(gè)項(xiàng)目都需要自己的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、創(chuàng)建宿主機(jī)掛載目錄并賦權(quán)
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 文件所在目錄下執(zhí)行安裝啟動(dòng)命令
  • 啟動(dòng)命令
docker-compose -f jenkins-compose.yml up -d
  • 停止命令
docker-compose -f jenkins-compose.yml down
  • 重新創(chuàng)建某一個(gè)容器命令
docker-compose -f jenkins-compose.yml up --force-recreate --no-deps 服務(wù)名稱
  • 查看容器運(yùn)行情況
[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

  • 查看某一容器的運(yùn)行日志 docker logs -f 容器id
[root@root server]# docker logs -f b28f1878ee08
  • 重啟某一容器 docker restart 容器id
[root@root server]# docker restart  b28f1878ee08
4、通過(guò)界面訪問(wèn)Jenkins,通過(guò)提示的路徑找到初始密碼并輸入,然后進(jìn)行下一步
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、部分插件安裝失敗,根據(jù)后臺(tái)日志可知,部分插件因?yàn)閖enkins版本太低,所以不能安裝,這里先進(jìn)行下一步,在系統(tǒng)中升級(jí)jenkins版本之后,再繼續(xù)安裝插件。(jenkins/jenkins:lts鏡像里面集成的不是最新的jenkins,但在下載插件時(shí),是下載的最新的插件,導(dǎo)致不兼容,所以無(wú)法下載)
安裝失敗

報(bào)錯(cuò)日志:

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之后,首先進(jìn)入系統(tǒng)管理然后升級(jí)Jenkins版本
升級(jí)Jenkins

升級(jí)Jenkins
9、然后安裝所需插件,系統(tǒng)管理 > 插件管理
  • Blue Ocean :Jenkins Pipeline設(shè)計(jì)的一個(gè)聚合工具,圖形化Pipeline的流程,使流水線更加直觀。
  • SonarQube Scanner for Jenkins:代碼質(zhì)量掃描工具,Jenkins掃描代碼后將結(jié)果發(fā)送到SonarQube Server。
  • NodeJS Plugin :打包NodeJs項(xiàng)目時(shí),需要的插件,用于運(yùn)行NodeJs環(huán)境。
  • Maven Integration plugin:Maven工程打包插件。
  • Publish Over SSH:將打包后的文件,發(fā)送到遠(yuǎn)程服務(wù)器。
10、系統(tǒng)管理 > 系統(tǒng)配置
  • Maven參數(shù)配置,此處根據(jù)自己服務(wù)器的配置情況配置
-Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=64m
Maven參數(shù)
  • SonarQube servers配置,此處配置我們使用docker-compose部署的SonarQube,Server authentication token必填,這個(gè)在后續(xù)步驟會(huì)說(shuō)明如何從SonarQube獲取生成token。


    SonarQube servers
  • Publish over SSH配置,這里配置我們需要部署到的服務(wù)器,可以部署多個(gè)。點(diǎn)擊下側(cè)的“高級(jí)”,填寫(xiě)服務(wù)器密碼和端口。


    Publish over SSH
11、系統(tǒng)管理 > 全局工具配置,這里主要安裝一些所需插件需要的軟件環(huán)境,jenkins/jenkins:lts鏡像默認(rèn)裝有openjdk和git,如果沒(méi)有特殊要求,我們可以不安裝,我們?cè)谶@里安裝SonarQube Scanner、Maven、NodeJS。
  • SonarQube Scanner安裝


    SonarQube Scanner安裝
  • Maven安裝,最好自己下載后上傳到服務(wù)器,因?yàn)槭褂梅?wù)器下載安裝很慢。


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


    Maven全局配置
  • 修改Maven全局配置中配置文件里面的jar包存儲(chǔ)路徑,否則不同任務(wù)構(gòu)建都會(huì)重新下載jar包。


    jar包存儲(chǔ)路徑
  • NodeJS安裝,選擇自己所需要的版本,同時(shí)如果有其他工具包可以在下方填寫(xiě),比如我們使用的是pnpm,使用的鏡像源是https://registry.npm.taobao.org ,可以在下方填寫(xiě):

pnpm -registry=https://registry.npm.taobao.org
NodeJS安裝
GitEgg-Cloud是一款基于SpringCloud整合搭建的企業(yè)級(jí)微服務(wù)應(yīng)用開(kāi)發(fā)框架,開(kāi)源項(xiàng)目地址:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容