从零开始搭建一条jenkins自动化部署流水线
# 0. 前言
本次流水线搭建目标实现: 代码检查-代码打包-部署 三步自动化.
# 1. 环境搭建
服务器: 一台centos7.8虚拟机, IP: 192.168.58.132
本地调试用, 一台就够, 资源充足可以多台
环境:
jdk1.8
,maven3.5.2
,jenkins2.289.1
,sonarqube8.2
,docker
,docker-copmpose
# 1.1 安装jdk
yum install -y java-1.8.0-openjdk-devel.x86_64
java -version
2
# 1.2 安装maven
wget http://repos.fedorapeople.org... -O /etc/yum.repos.d/epel-apache-maven.repo
wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven
mvn -v
2
3
4
# 1.3 安装git
yum install git
git
2
# 1.4 安装jenkins
这里直接使用war启动jenkins , 可以使用java -jar
命令, 也可以使用tomcat启动. 这次我用的是tomcat
jenkins.war下载地址 (opens new window)
启动后访问http://192.168.58.132:8080/jenkins (opens new window)
插件直接安装jenkins建议安装的插件, 如果有安装失败就重启jenkins几次.
默认密码在/var/jenkins_home/secrets/initialAdminPassword, 直接cat获取
# 1.5 安装sonarqube
先安装docker和docker-compose
yum install docker
systemctl enable docker && systemctl start docker
curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker version
docker ps
docker-compose -v
2
3
4
5
6
7
再启动sonarqube
version: "3.7"
services:
sonarqube:
image: sonarqube:8.2-community
depends_on:
- db
ports:
- "9000:9000"
networks:
- sonarnet
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
- sonarqube_temp:/opt/sonarqube/temp
db:
image: postgres
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
sonarqube_temp:
postgresql:
postgresql_data:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
docker-compose up -d
如果启动几秒后发现sonarqube报错:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least
执行以下命令然后重启容器sysctl -w vm.max_map_count=262144
1
# 汉化sonarqube
先下载汉化包插件点我获取 (opens new window)
查找sonarqube插件的挂载路径, docker默认卷存放位置在/var/lib/docker/volumes/下, 如果按照上述安装步骤一直进行的话, sonarqube容器的插件包路径应该在宿主机的/var/lib/docker/volumes/sonar_sonarqube_extensions/_data/plugins
下, 将下载好的jar放着这里
然后重启再次访问http://192.168.58.132/9000 (opens new window), 可以看到汉化成功
# 2.配置jenkins
# 2.1 下载插件
进入插件搜索页面 (opens new window), 分别搜索gitee, sonarqube scanner, Config File Provider, 然后安装
# 2.2 新增maven settings文件
进入配置文件管理页面 (opens new window), 选择Maven settings.xml, 然后submit, 在编辑页面里的content框中粘贴进去你的settings.xml配置然后submit
# 2.3 全局配置
# 2.3.1 配置java
# 2.3.2 配置git
git直接默认配置就好
# 2.3.3 配置sonarqube
选择自动安装 版本选择4.0
去sonarqube生成一个token
在jenkins配置sonarqube的token
# 2.3.4 配置maven
进入系统配置页面http://192.168.58.132:8080/jenkins/configure (opens new window)
# 2.4 系统配置
# 2.4.1配置sonarqube
token选择2.3.3中配置的token
# 2.4.2配置gitee
配置令牌之后在job中不能选择使用, 还是需要gitee的账号密码来验证, 好像这个gitee APIV5 token没有任何作用, 这一点有待验证
# 3.测试Job
新建一个任务, 选择free style项目
demo项目地址https://gitee.com/ytg2097/gitee-ci.git (opens new window)
# 3.1 General
# 3.2 源码管理
gitee链接选择2.4.2中配置的gitee地址
源码管理中Repository URL填写你的git项目地址; Credentials添加一个全局的username类型凭证, 填写git账号密码
# 3.3 构建环境
构建环境中选择之前配置的maven settings文件
# 3.4 构建
构建步骤中新增三个步骤: shell - SonarqubeScanner - shell. 三个步骤顺序不能错, 因为Sonnar需要扫描classes目录, 如果没有在sonar扫描之前进行maven打包操作的话会报如下错误
# 3.4.1 maven 打包命令
mvn clean install -Dmaven.test.skip=true
# 3.4.2 sonarqube scanner
sonar scanner步骤中的Analysis properties根据实际情况填写以下内容, 其他内容不用填, 默认就可以
sonar.projectKey=ci-test.cn
sonar.projectName=ci-test
sonar.projectVersion=1.0
sonar.sources=src
sonar.java.binaries=target/classes
sonar.language=java
2
3
4
5
6
# 3.4.3 启动jar
最后一步启动jar , 在shell步骤中根据需求填写shell命令就可以, 这里直接执行项目中内置的sh
#!/bin/sh
chmod 755 start.sh
chmod 755 stop.sh
./stop.sh
echo "先停止"
./start.sh
echo "后启动"
2
3
4
5
6
7
全部配置完成后保存然后执行一下试试
浏览器访问测试
去sonar看一下扫描结果
# 4. 后语
后面会再更新一篇云服务器环境搭建, 以及容器应用的自动化部署