从零开始搭建一条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
1
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
1
2
3
4

# 1.3 安装git

yum install git
git
1
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
1
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:
1
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
1

如果启动几秒后发现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放着这里

image-20210701170352931

然后重启再次访问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 全局配置

进入全局工具配置页面 (opens new window)

# 2.3.1 配置java

image-20210701172410009

# 2.3.2 配置git

git直接默认配置就好

image-20210701172526943

# 2.3.3 配置sonarqube

选择自动安装 版本选择4.0

image-20210701172632014

去sonarqube生成一个token

image-20210701173002630

在jenkins配置sonarqube的token

image-20210701173142754

# 2.3.4 配置maven

image-20210701172734324

进入系统配置页面http://192.168.58.132:8080/jenkins/configure (opens new window)

# 2.4 系统配置

# 2.4.1配置sonarqube

image-20210702105600086

token选择2.3.3中配置的token

# 2.4.2配置gitee

image-20210702105813187

image-20210702105724228

配置令牌之后在job中不能选择使用, 还是需要gitee的账号密码来验证, 好像这个gitee APIV5 token没有任何作用, 这一点有待验证

# 3.测试Job

新建一个任务, 选择free style项目

demo项目地址https://gitee.com/ytg2097/gitee-ci.git (opens new window)

# 3.1 General

image-20210702110423395

# 3.2 源码管理

gitee链接选择2.4.2中配置的gitee地址

源码管理中Repository URL填写你的git项目地址; Credentials添加一个全局的username类型凭证, 填写git账号密码

image-20210702111208008

image-20210702111314695

# 3.3 构建环境

构建环境中选择之前配置的maven settings文件

image-20210702111418234

# 3.4 构建

构建步骤中新增三个步骤: shell - SonarqubeScanner - shell. 三个步骤顺序不能错, 因为Sonnar需要扫描classes目录, 如果没有在sonar扫描之前进行maven打包操作的话会报如下错误

image-20210702153858954

# 3.4.1 maven 打包命令

mvn clean install -Dmaven.test.skip=true
1

image-20210702154106607

# 3.4.2 sonarqube scanner

sonar scanner步骤中的Analysis properties根据实际情况填写以下内容, 其他内容不用填, 默认就可以

image-20210702154307169

sonar.projectKey=ci-test.cn    
sonar.projectName=ci-test      
sonar.projectVersion=1.0
sonar.sources=src
sonar.java.binaries=target/classes
sonar.language=java
1
2
3
4
5
6

# 3.4.3 启动jar

最后一步启动jar , 在shell步骤中根据需求填写shell命令就可以, 这里直接执行项目中内置的sh

image-20210702154351765

#!/bin/sh
chmod 755 start.sh
chmod 755 stop.sh
./stop.sh
echo "先停止"
./start.sh
echo "后启动"
1
2
3
4
5
6
7

全部配置完成后保存然后执行一下试试

image-20210702154658738

浏览器访问测试

image-20210702154734434

去sonar看一下扫描结果

image-20210702112427317

# 4. 后语

后面会再更新一篇云服务器环境搭建, 以及容器应用的自动化部署