【微服務(wù)部署】使用Docker-compose部署Jenkins、SonarQube
作者:AI全棧程序猿
因并不是每個項目都需要自己的Maven私服,所以這里去除了Maven私服Nexus的部署,如果需要,直接在jenkins-compose.yml文件中添加即可。
一、安裝
1、編寫docker-compose部署Postgres、SonarQube、Jenkins的yml文件jenkins-compose.yml
- Postgres:作為SonarQube的數(shù)據(jù)庫存儲
- SonarQube:代碼質(zhì)量檢查
- Jenkins:jenkins/jenkins:lts鏡像,jenkinsci/blueocean鏡像缺少node運行時環(huán)境,導(dǎo)致node無法運行。
關(guān)鍵配置說明( 宿主機(jī) : Docker容器):
- /data/docker/ci/postgresql/data:/var/lib/postgresql/data # Postgres數(shù)據(jù)存儲映射到宿主機(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容器中運行宿主機(jī)docker命令,如果宿主機(jī)沒有這個文件,可以使用以下命令進(jìn)行安裝。
- 這里將Docker容器的內(nèi)存設(shè)置為10G,因為我們NodeJS打包需要設(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
因并不是每個項目都需要自己的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í)行安裝啟動命令
- 啟動命令
docker-compose -f jenkins-compose.yml up -d
- 停止命令
docker-compose -f jenkins-compose.yml down
- 重新創(chuàng)建某一個容器命令
docker-compose -f jenkins-compose.yml up --force-recreate --no-deps 服務(wù)名稱
- 查看容器運行情況
[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,通過提示的路徑找到初始密碼并輸入,然后進(jìn)行下一步
[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ù)后臺日志可知,部分插件因為jenkins版本太低,所以不能安裝,這里先進(jìn)行下一步,在系統(tǒng)中升級jenkins版本之后,再繼續(xù)安裝插件。(jenkins/jenkins:lts鏡像里面集成的不是最新的jenkins,但在下載插件時,是下載的最新的插件,導(dǎo)致不兼容,所以無法下載)
報錯日志:
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)
二、配置
1、登錄到Jenkins之后,首先進(jìn)入系統(tǒng)管理然后升級Jenkins版本
2、然后安裝所需插件,系統(tǒng)管理 > 插件管理
- Blue Ocean :Jenkins Pipeline設(shè)計的一個聚合工具,圖形化Pipeline的流程,使流水線更加直觀。
- SonarQube Scanner for Jenkins:代碼質(zhì)量掃描工具,Jenkins掃描代碼后將結(jié)果發(fā)送到SonarQube Server。
- NodeJS Plugin :打包NodeJs項目時,需要的插件,用于運行NodeJs環(huán)境。
- Maven Integration plugin:Maven工程打包插件。
- Publish Over SSH:將打包后的文件,發(fā)送到遠(yuǎn)程服務(wù)器。
3、系統(tǒng)管理 > 系統(tǒng)配置
- Maven參數(shù)配置,此處根據(jù)自己服務(wù)器的配置情況配置。
-Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=64m
- SonarQube servers配置,此處配置我們使用docker-compose部署的SonarQube,Server authentication token必填,這個在后續(xù)步驟會說明如何從SonarQube獲取生成token。
- Publish over SSH配置,這里配置我們需要部署到的服務(wù)器,可以部署多個。點擊下側(cè)的“高級”,填寫服務(wù)器密碼和端口。
4、系統(tǒng)管理 > 全局工具配置,這里主要安裝一些所需插件需要的軟件環(huán)境,jenkins/jenkins:lts鏡像默認(rèn)裝有openjdk和git,如果沒有特殊要求,我們可以不安裝,我們在這里安裝SonarQube Scanner、Maven、NodeJS。
- SonarQube Scanner安裝
- Maven安裝,最好自己下載后上傳到服務(wù)器,因為使用服務(wù)器下載安裝很慢。
- Maven全局配置,配置Maven的配置文件
- 修改Maven全局配置中配置文件里面的jar包存儲路徑,否則不同任務(wù)構(gòu)建都會重新下載jar包。
- NodeJS安裝,選擇自己所需要的版本,同時如果有其他工具包可以在下方填寫,比如我們使用的是pnpm,使用的鏡像源是https://registry.npm.taobao.org ,可以在下方填寫:
pnpm -registry=https://registry.npm.taobao.org
責(zé)任編輯:姜華
來源:
今日頭條