# cicddemo
**Repository Path**: jasonliu459/cicddemo
## Basic Information
- **Project Name**: cicddemo
- **Description**: cicddemo jenkins sonarqube gitlab
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-12-28
- **Last Updated**: 2022-12-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#### 虚拟机环境
1. 内存:8g,cpu 8核,注意:gitlab消耗内存比较多,内存或者cpu过低,会导致很多异常,建议有条件尽量多给点,如果出现异常可首先查看虚拟机资源是否充足
#### 安装gitlab
1. 下载rpm安装包:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.6.6-ce.0.el7.x86_64.rpm
2. 上传到服务器
3. 安装gitlab: `rpm -ivh 安装包`
4. 修改默认请求地址:
```
vim /etc/gitlab/gitlab.rb
修改 external_url为真实ip端口
gitlab-ctl reconfigure
gitlab-ctl restart
```
#### 使用gitlab
1. 登录 :用户名:root,密码:`cat /etc/gitlab/initial_root_password` 进行查看
2. 创建项目,提交项目(略)
#### 安装docker
0. 安装yum util:
```
yum install yum-utils -y
```
1. 安装阿里的yum源
```
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
```
2. 安装
```
yum list docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io -y
```
3. 安装成功后,配置阿里免费镜像源(登录阿里容器镜像服务获取)
```
mkdir -p /etc/docker/
touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://cbxbkuy6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```
4. 设置开机启动:
```
systemctl enable docker.service
```
#### 安装jenkins
```
mkdir -p /docker/jenkins/data
```
注意docker镜像,其他很多包无法下载插件
```
docker pull jenkins/jenkins:centos7-jdk11
docker run -d -u root --restart=always \
-p 8883:8080 \
-p 50000:50000 \
-v /docker/jenkins/data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:centos7-jdk11
```
其中 /var/run/docker.sock 和 /usr/bin/docker目录的作用是为了能在jenkins中使用宿主机的docker
#### jenkins使用
1. 登录
- 访问:http://ip:8883/
- 获取密码,输入密码登录:`cat /docker/jenkins/data/secrets/initialAdminPassword`
- 选择安装推荐插件,等待安装后,设置用户密码
4. 配置maven
- 安装maven插件:系统管理-> 插件管理 -> available plugins -> Maven Integration
- 配置maven:点击 Manage Jenkins -> Global Tool Configuration
- 点击新增maven,设置名字后让其自动安装即可(熟悉maven和jenkins的话可以将settings文件配置到私库,否则可能编译很慢)
5. gitlab插件(非必要)
- 安装插件:系统管理-> 插件管理 -> available plugins -> gitlab
#### 安装sonarqube
```
docker pull sonarqube:9.7-community
docker run -d --name sonarqube --restart=always \
-p 9000:9000 \
-v /docker/sonarqube/data:/opt/sonarqube/data \
-v /docker/sonarqube/extensions:/opt/sonarqube/extensions \
-v /docker/sonarqube/logs:/opt/sonarqube/logs \
sonarqube:9.7-community
```
#### 使用sonarqube
1. 登录
- 访问 http://1p:9000
- 输入用户名密码:admin/admin
- 修改默认用户名密码
2. 插件安装
- 安装方法:下载好jar包后,将jar包放到 `/docker/sonarqube/extensions/plugins`目录下,重启sonarqube即可
- 中文插件:`https://objects.githubusercontent.com/github-production-release-asset-2e65be/6060405/2d74db31-d2e1-4aca-8bb4-851ea78094e2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221228%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221228T031122Z&X-Amz-Expires=300&X-Amz-Signature=c0a0db76c02d73a4d9d551aa5bf72fe7c062936dea30ae009a9b68838b12972f&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=6060405&response-content-disposition=attachment%3B%20filename%3Dsonar-l10n-zh-plugin-9.7.jar&response-content-type=application%2Foctet-stream`
#### sonarqube和jenkins联合使用
##### 代码部分
1. 代码部分,项目pom文件中新增依赖:
```
org.jacoco
jacoco-maven-plugin
0.8.7
org.mockito
mockito-inline
3.9.0
test
org.springframework.boot
spring-boot-maven-plugin
org.jacoco
jacoco-maven-plugin
0.8.7
pre-test
prepare-agent
post-test
test
report
```
2. junittest类示例:
```
import com.example.cicddemo.dao.TestDAO;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.jupiter.api.Assertions.*;
@RunWith(MockitoJUnitRunner.class)
public class TestServiceTest {
@InjectMocks
TestService testService;
@Mock
TestDAO testDAO;
@BeforeEach
public void setUp(){
/** 初始化mock **/
MockitoAnnotations.initMocks(getClass());
}
@Test
public void testService(){
/** 将testDAO进行mock,并设置返回值 **/
Mockito.when(testDAO.add()).thenReturn(1);
/** 调用想要测试的service类 **/
testService.test();
}
}
```
##### sonarqube部分
1. 设置令牌:
- 点击右上角用户图标 -> 我的账号 -> 安全
- 输入令牌名称(任意),选择类型为:全局分析令牌,过期时间选择“永不过期”,点击生成,记录下生成的秘钥,在jenkins中需要
#### jenkins部分
1. 配置sonar_scaner插件
- 系统管理-> 插件管理 -> available plugins -> sonar scaner
- 全局工具配置中,新增sonarQubeScaner,配置为自动安装即可,版本
2. 配置sonarQube信息,让jenkins知道sonarqube在哪
- 系统管理->系统配置-> SonarQube servers -> add sonarqube
- Server URL 配置为安装的sonarqube的地址
- 找到Server authentication token,添加认证信息,类型选择:“secret text”,将上一步中在sonarqube中生成的令牌填入
- 保存
3. 创建项目
- 首页点击新建任务 -> 构建一个maven项目 -> 配置
- 仓库选git,输入git地址比如:http://192.168.137.147/root/cicddemo.git, Credentials部分,添加类型为username with password类型的认证,输入gitlab的用户名密码即可
- build -> Goals and options 填入 clean package -Dmaven.test.failure.ignore=true
- Post Steps 选择 Run only if build succeeds
- add post-build step 选择Execute SonarQube Scaner,并在 Analysis properties填入如下信息,每个项目需要改动名称
```
# 项目标识符,在给定的 SonarQube 中必须是唯一的
sonar.projectKey=testDemo
sonar.projectVersion=1.0
sonar.sources=src/main/java
sonar.java.binaries=target/classes
sonar.language=java
#单元测试覆盖率
sonar.sourceEncoding=UTF-8
sonar.core.coveragePlugin=jacoco
sonar.jacoco.reportPaths=target/jacoco.exec
sonar.java.test.binaries=target/test-classes
sonar.coverage.exclusions=**/entity/**
sonar.login=sqa_7bfb48fbb4fc976ec91f3fe79674fe0845db3cfd
```
4. 构建项目
- 点击立即构建,可以点击构建id -> 控制台输出 查看构建日志
##### 登录sonarqube查看编译结果