gitlab cicd环境搭建

1、安装docker、docker-compose

docker简介:

        Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个可移植的容器中

docker-compose简介:

        docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许用户通过一个 YAML 文件配置应用程序的服务、网络和卷,然后使用简单的命令启动或管理整个应用程序。

安装如下:

sudo apt install docker
sudo apt install docker-compose
# 更新镜像源
vi /etc/docker/daemon.json
# 将如下内容添加进去

{
    "registry-mirrors": [
    "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://your_preferred_mirror",
    "https://dockerhub.icu",
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
	"https://hub.geekery.cn",
    "https://hub.littlediary.cn",
    "https://docker.rainbond.cc",
    "https://docker.unsee.tech",
    "https://docker.m.daocloud.io",
    "https://hub.crdz.gq",
    "https://docker.nastool.de",
    "https://hub.firefly.store",
    "https://registry.dockermirror.com",
    "https://docker.1panelproxy.com",
    "https://hub.rat.dev",
    "https://docker.udayun.com",
    "https://docker.kejilion.pro",
    "https://dhub.kubesre.xyz",
    "https://ov6czrb4.mirror.aliyuncs.com",
    "https://docker.hpcloud.cloud",
    "https://docker.m.daocloud.io",
    "https://docker.unsee.tech",
    "https://docker.1panel.live",
    "http://mirrors.ustc.edu.cn",
    "https://docker.chenby.cn",
    "http://mirror.azure.cn",
    "https://dockerpull.org",
    "https://hub.rat.dev"
    ]
}

# 重启docker
service docker restart
# 查看docker镜像源是否更新成功
docker info

2、安装代码扫描工具sonarqube + 数据库Postgres

        SonarQube 是一个开源的代码质量管理平台,主要用于通过静态代码分析检测代码中的漏洞、错误、代码异味、重复代码等问题,并提供详细的代码质量报告。它支持多种编程语言(如 Java、Python、JavaScript 等),并可以与持续集成工具(如 Jenkins)和代码版本控制系统(如 Git)集成。

        SonarQube 需要一个数据库来存储代码分析结果、配置信息以及项目质量快照。PostgreSQL 是一种支持多种数据类型和高级功能的关系型数据库,被广泛用于 SonarQube 的后端存储

        使用docker拉取sonarqube + postgres + gitlab +gitlab-runner镜像

# 拉取sonnarqube社区版镜像
docker pull sonarqube:9.9.8-community
# 拉取postgres镜像,未指定版本则默认拉最新的
docker pull postgres

# 拉gitlab社区版、gitlab-runner最新版本
docker pull gitlab/gitlab-ce:latest
docker pull gitlab/gitlab-runner:latest

找到一个目录下,如/home/docker/,新增docker-compose.yml,内容填写如下:

services:
  db:
    image: postgres
    container_name: db
    ports:
      - "5432:5432"
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonarqube

  sonarqube:
    image: sonarqube:9.9.8-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarqube?currentSchema=sonarqube
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /home/docker/volume/sonarqube9.9.8/conf:/opt/sonarqube/conf
      - /home/docker/volume/sonarqube9.9.8/data:/opt/sonarqube/data
      - /home/docker/volume/sonarqube9.9.8/logs:/opt/sonarqube/logs
      - /home/docker/volume/sonarqube9.9.8/extensions:/opt/sonarqube/extensions

networks:
  sonarnet:
    driver: bridge

参考上述文件中的挂载到宿主机的地址,需要宿主机本地新建几个目录,具体如下

[root@localhost]# ls -al /home/docker/volume/
总用量 0
drwxrwxrwx. 3 root root 28 2月  25 18:56 .
drwxr-xr-x. 5 root root 55 1月  17 16:54 ..
drwxrwxrwx. 6 root root 60 2月  25 18:53 sonarqube9.9.8
[root@localhost]# ls -al /home/docker/volume/sonarqube9.9.8
总用量 4
drwxrwxrwx. 6 root root   60 2月  25 18:53 .
drwxrwxrwx. 3 root root   28 2月  25 18:56 ..
drwxrwxrwx. 2 root root   30 2月  25 20:22 conf
drwxrwxrwx. 4 root root   46 2月  12 16:57 data
drwxrwxrwx. 5 root root   57 2月  12 16:59 extensions
drwxrwxrwx. 2 root root 4096 2月  27 13:55 logs

// 开放所有权限 用于容器可以对本机文件进行修改
chmod -R 777 /home/docker/volume/

进入docker-compose.yml所在的目录,启动镜像

[root@localhost]# docker-compose up -d
# 查看镜像是否启动成功
[root@localhost]# docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED      STATUS      PORTS                                       NAMES
0d467e6b5ab5   sonarqube:9.9.8-community   "/opt/sonarqube/dock…"   2 days ago   Up 2 days   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   sonarqube
0c6ceeadc24c   postgres                    "docker-entrypoint.s…"   2 days ago   Up 2 days   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   db

使用navicat 连接数据库,用户名密码为docker-compose.yml中设置的sonar/sonar

连接成功后新增sonarqube数据库,在数据库中新增模式sonarqube

停止sonarqube + postgres镜像

docker stop *** # ***更换成docker ps查询到的镜像id

修改 sonar.properties 与数据库连接的相关信息

cd /home/docker/volume/sonarqube9.9.8/conf
vi sonar.properties
# 改动点如下
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

sonar.jdbc.url=jdbc:postgresql://db:5432/sonarqube?currentSchema=sonarqube

如图:

宿主机运行如下命令设置

// 设置官方推荐的值
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

重新启动容器

docker-compose up -d

3、安装gitlab + gitlab-runner

编辑gitlab的 docker-compose.yml文件,volumes项标明要挂载出来的目录,在当前docker-compose.yml文件所在的目录下新建config、logs、data文件夹

version: '3.1'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.1.144:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:2224'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'

编辑gitlab-runner的 docker-compose.yml文件,volumes项标明要挂载出来的目录,在当前docker-compose.yml文件所在的目录下新建config文件夹

services:
  gitlab-runner:
    image: 'gitlab/gitlab-runner:latest'
    restart: unless-stopped
    container_name: 'gitlab-runner'
    privileged: true
    volumes:
      - ./config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

启动gitlab + gitlab-runner,登录gitlab(地址:http://192.168.1.144:8929/)用户名为root,密码需要从文件中获取,如下

docker exec d445b68aec61 cat /etc/gitlab/initial_root_password |grep Password

登录sonarqube,地址(http://192.168.1.123:9000/projects),初始账户名密码:admin/admin

4、 gitlab-runner集成sonar-scanner

方法一:

Sonar-scanner 是用于将代码扫描和sonarQube进行交互

sonar-scanner下载:

# 进入gitlab-runner镜像,给镜像安装sonar-scanner
docker exec -it (gitlab-runner的容器id) bash

# 下载sonar-scanner文件
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip

# 更新包列表 因为容器没有 unzip
apt-get update
apt update

# 安装 unzip
apt-get -y install unzip
apt -y install unzip

# 安装 vim
apt-get -y install vim
apt -y install vim

# 解压
unzip sonar-scanner-cli-5.0.1.3006-linux.zip

# 修改 sonar-scanner.properties 配置文件
vim /home/sonar-scanner-5.0.1.3006-linux/conf/sonar-scanner.properties

# 修改点如下,地址为sonar地址:
sonar.host.url=http://192.168.1.***:9000

#配置环境变量。编辑全局配置文件
#在文件末尾追加内容:
#sonar-scanner
echo 'export PATH=$PATH:/home/sonar-scanner-5.0.1.3006-linux/bin' >> /etc/profile
echo 'export PATH=$PATH:/home/sonar-scanner-5.0.1.3006-linux/bin' >> /root/.bashrc

# 使配置生效
source /root/.bashrc
source /etc/profile

# 查看是否配置成功。
sonar-scanner -v

打开gitlab,注册一个新的runner,并获取新的token值,可以在admin area -- CI/CD -- Runner -- New instrance runner,输入tags、details、Maximum job timeout,即可新增成功

在gitlab-runner安装的宿主机上直接执行命令

// 开始注册 无需进入容器 宿主机执行
docker exec gitlab-runner-scan gitlab-runner register \
    --non-interactive \
    --url "http://192.168.1.144:8929" \               #此处地址更新为具体地址
    --registration-token "*********" \                #此处更新为之前注册完获取的token
    --executor "shell" \
    --description "java description" \
    --tag-list "java-scan" \
    --run-untagged="false" \
    --locked="false" \
    --access-level="not_protected"

执行结果大概如下: 

注:gitlab-runner注册可进行如下一步一步操作

方法二:

        在一个目录下新建Dockerfile,内容如下

FROM gitlab/gitlab-runner:v16.6.1
ENV SONAR_NAME 192.168.1.144
ENV SONAR_SCANNER_ZIP sonar-scanner-cli-5.0.1.3006-linux
ENV SONAR_SCANNER_FILE sonar-scanner-5.0.1.3006-linux
WORKDIR /home
RUN sed -i 's/htt[p|ps]:\/\/archive.ubuntu.com\/ubuntu\//mirror:\/\/mirrors.ubuntu.com\/mirrors.txt/g' /etc/apt/sources.list
RUN wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/$SONAR_SCANNER_ZIP.zip \
    && apt-get update \
    && apt update \
    && apt-get install -y locales \
    && locale-gen "en_US.UTF-8" \
    && update-locale LC_ALL="en_US.UTF-8" \
    && export LANG="en_US.UTF-8" \
    && apt-get -y install unzip \
    && apt -y install unzip \
    && unzip $SONAR_SCANNER_ZIP.zip && echo "export PATH=\$PATH:/home/$SONAR_SCANNER_FILE/bin" >> /etc/profile \
    && echo "export PATH=\$PATH:/home/$SONAR_SCANNER_FILE/bin" >> /root/.bashrc \
    && . /etc/profile \
    && . /root/.bashrc \
    && sed -i "s/#sonar.host.url=http:\/\/localhost:9000/sonar.host.url=http:\/\/$SONAR_NAME:9000/g" /home/$SONAR_SCANNER_FILE/conf/sonar-scanner.properties \
    && rm -f /home/$SONAR_SCANNER_ZIP.zip
// 在 DockerFile 的目录下执行命令构建镜像
docker build -t gitlab-runner-sonar-scanner:v1.0.0 .

镜像执行成功后,使用如下命令启动这个新的镜像

docker run -d --name gitlab-runner-scan -v /home/docker/volume/gitlab-runner/config-scan:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock --privileged=true gitlab-runner-sonar-scanner:v1.0.0

或者使用docker-compose.yml文件启动镜像

# 新增docker-compose.yml
vi docker-compose.yml

# 内容如下
services:
  gitlab-runner:
    image: 'gitlab-runner-sonar-scanner:v1.0.0'
    restart: unless-stopped
    container_name: 'gitlab-runner-scan'
    privileged: true
    volumes:
      - ./config-scan:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

注册runner方式与方法一中一致 ,此处不在赘述

5、打通sonarqube与gitlab

5.1、创建gitlab的访问令牌。

        点击用户图像 -- Edit profile -- Access tokens,注册结束后获取token

5.2、sonarqube上新增配置

配置 名称 / 路径 / token . 其中需要注意的是 路径写地址即可,token输入上一步创建的gitlab token即可

5.3、在sonarqube上拉取gitlab的项目,选择gitlab后输入5.1步骤新增的token即可

更新key项目 Key 是 SonarQube 中用于唯一标识项目的标识符。

6、.gitlab-ci.yml 文件创建扫描

stages:
  #阶段,配置需要执行的阶段 可以配置多个
  - sonarqube_scan
sonarqube-check:
  #阶段,取自开始的stages
  stage: sonarqube_scan
  # sonar-scanner 相当于直接在容器中执行 sonar-scanner 命令
  script:
    - sonar-scanner -Dsonar.projectName=$CI_PROJECT_NAME -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.sourceEncoding=UTF-8 -Dsonar.projectVersion=1.0 -Dsonar.language=java -Dsonar.sources=src -Dsonar.java.binaries=.  -Dsonar.login=sqp_58007566cef6780a36aa2f489cd4fb5d85338b66 -Dsonar.qualitygate.wait=true
  allow_failure: false
  #标签 找 runner
  tags:
    - sonar
  # 只允许 master 分支触发 并且只有合并到 master 时才会触发
  only:
    - master
    - merge_requests

要使用Gitlab进行CI/CD(持续集成/持续部署)的教程(使用Docker版),可以按照以下步骤进行操作: 1. 首先,安装并运行Gitlab Runner。可以使用以下命令一键安装并运行Gitlab Runner容器: ``` docker run -d --name gitlab-runner --restart always \ -v /home/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest ``` 这个命令会在后台运行一个Gitlab Runner容器,并将配置文件挂载到本地目录,同时也将Docker套接字挂载到容器中。 2. 接下来,安装并运行Gitlab服务器。可以使用以下命令一键安装并运行Gitlab CE(社区版)容器: ``` docker run --detach \ --hostname localhost \ --publish 443:443 --publish 80:80 --publish 222:22 \ --name gitlab \ --restart always \ --volume /home/gitlab/config:/etc/gitlab \ --volume /home/gitlab/logs:/var/log/gitlab \ --volume /home/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest ``` 这个命令会在后台运行一个Gitlab CE容器,并将配置文件、日志和数据目录挂载到本地文件夹中。 3. 在Gitlab服务器上注册Gitlab Runner。可以使用以下命令运行注册命令: ``` docker run --rm -v /home/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \ --non-interactive \ --executor "docker" \ --docker-image alpine:latest \ --url "http://localhost/" \ --registration-token "xxxxxx" \ --description "runner" \ --tag-list "build" \ --run-untagged="true" \ --locked="false" \ --access-level="not_protected" ``` 这个命令会在Gitlab Runner容器中执行注册命令,并将配置文件挂载到本地目录。 通过以上步骤,你就可以搭建一个基于Docker的Gitlab CI/CD环境,并使用Gitlab Runner执行CI/CD任务。在此基础上,你可以根据具体需求进行配置和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值