文章目录
持续集成目标
- 流水线 Java 示例:http://192.168.0.111/root/sonar-maven-multimodule。
- 构建和部署流程自动化(TBD)
- 单元测试自动化 (TBD)
- 集成代码分析服务 (完成)
- 验收测试自动化(TBD)
- 发布自动化(TBD)
环境搭建
通过 dokcer 安装 SonarQube
-
问题1:给 Elasticsearch 分配内存的配置问题
解决方法为在宿主机执行:sysctl -w vm.max_map_count=262144(临时修改重启失效)
永久修改: vim /etc/sysctl.conf,vm.max_map_count=262144。 -
安装中文支持插件:应用市场查找 chinese
-
docker-compose up -d
-
访问地址:http://192.168.0.111:9000/
docker-compose.yml
version: "3"
services:
sonarqube:
image: sonarqube:9.2.4-community
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:12
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
Sonar 配置
- 修改默认用户名密码
- Java 代码分析 jdk 版本 11
mvn clean verify sonar:sonar -D"sonar.projectKey=maven-basic" -D"sonar.host.url=http://192.168.0.111:9000" -D"sonar.login=39b3bd857f2520c8fa964f7bd66afeb7c9c670d3"
Sonar 集成 Gitlab
- Authenticate with GitLab - Sign in to SonarQube with your GitLab credentials.
- Import your GitLab projects
- Analyze projects with GitLab CI/CD
- Report your Quality Gate status to your merge requests
docker 安装 Jenkins
- 在 docker-compose.yml 中添加:
jenkins:
image: 'jenkins/jenkins:lts'
container_name: jenkins
restart: always
ports:
- '9002:8080'
- '9003:50000'
volumes:
- '/srv/devops/jenkins_home:/var/jenkins_home'
- 执行:
chown -R 1000:1000 jenkins_home
docker-compose up -d jenkins
- 访问: http://192.168.0.111:9002
- 获得初始密码:cat jenkins_home/secrets/initialAdminPassword
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jX30tYCp-1641777275276)(…/assets/img/jenkins.png)]
sonar 集成 Jenkins
-
Jenkins 中安装插件
GitLab plugin for Jenkins - version 1.5.13 or later
SonarQube Scanner plugin for Jenkins - version 2.11 or later -
通过菜单:Jenkins Dashboard > Manage Jenkins > Manage Plugins 搜索并安装 SonarQube Scanner plugin.
-
通过 Jenkins Dashboard > Manage Credentials, 点击凭据域列表中的 Global 链接.
-
点击添加凭据 (credentials) 按钮,填写:
类型: Secret Text
范围: Global
Secret: 需要在 SonarQube 中 User > My Account > Security 生成 token. -
在 Jenkins 中通过菜单 Dashboard > Manage Jenkins > Configure System 找到 SonarQube Servers section 配置:
勾选:Environment variables Enable injection of SonarQube server configuration as build environment variables
Name: SonarQube 实例名.
Server URL: SonarQube 实例 URL: http://192.168.0.111:9000. (localhost:9000 测试失败)
Credentials: 选择第四步设置的凭据.
在 sonar 中配置项目通过 Jenkins 分析项目
-
在 sonarqube 中从 gitlab 导入项目:http://192.168.0.111/root/sonar-maven-multimodule
-
在 sonarqube 中添加项目并进行代码分析配置。注意:此处中文翻译有问题
-
在 jenkins 中添加流水线项目,在构建触发器(Build Triggers)下
-
勾选 Build when a change is pushed to GitLab. 记录 webhook URL,在GitLab中配置Webhook时使用。
webhook URL:http://192.168.0.111:9002/project/sonar-maven-multimodule -
Enabled GitLab triggers 中选择 Push events.
-
点击高级Advanced…按钮,打开高级设置,找到 Secret token 段点击生成按钮记录Token, 配置 GitLab webhook 需要
Token: f5b9fe1dda0eef5f57cc14f43f38ec3b -
在流水线 Pipeline 设置中,确认下面的配置:(找不到?注意:流水线类型的Item才有)
定义 Definition: Pipeline script from SCM
配置管理工具 SCM: 在 Branches to build 填写项目主分支名 “*/main” ,仅构建一个主分支
脚本路径 Script Path: Jenkinsfile -
在 gitlab 仓库中创建 GitLab Webhook,在 Push 操作时触发 Jenkins 任务。
在对应GitLab 仓库的 ‘设置>WebHooks’ 菜单下, 填写第 4 步及第 6 步生成的 URL 及 token.
URL: Enter the URL you wrote down in the previous step.
Secret Token: Enter the generated token you wrote down in the previous step.
在触发源Trigger中确认勾选: 推送事件 (Push events), 点击添加按钮保存Webhook。 -
在项目中添加文件 Jenkinsfile 并提交:
node { stage('SCM') { checkout scm } stage('SonarQube Analysis') { def mvn = tool 'Default Maven'; withSonarQubeEnv() { sh "${mvn}/bin/mvn clean verify sonar:sonar -Dsonar.projectKey=root_sonar-maven-multimodule_AX44TXvC5VAHAZFrS7Vg" } } }
-
在 Jenkins 中 Dashboard > Global Tool Configuration 下 Maven installations 段,添加一个名为 Default Maven 的 mvn 工具。
docker 部署的 Jenkins 无法使用docker的问题
参考:https://blog.csdn.net/kikajack/article/details/79806520
services:
jenkins-compose:
image: jenkins
privileged: true
user: root
ports:
- "8088:8080"
- "50000:50000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
- /home/demo/jenkins-compose:/var/jenkins_home
测试 docker 流水线
pipeline {
agent { docker { image 'maven:3.8.4-openjdk-11-slim' } }
stages {
stage('build') {
steps {
sh 'mvn --version'
}
}
}
}