centos7 安装配置 gitlab-ci/cd 集成 spring boot + knife4j

目录

前提条件

centos7 安装 gitlab

centos7 安装 gitlab-runner

centos7 安装配置 JDK

centos7 安装配置 maven

centos7 安装配置 docker

开放 2375 端口 (docker repository)

spring boot 项目目录下添加以下两个文件

.gitlab-ci.yml

Dockerfile

push 到 gitlab 上


前提条件

教程环境时间:2022.02.25 ​ 

# 安装配置系统环境:(已更换国内源) 
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

centos7 安装 gitlab

# 安装并配置依赖
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

# 安装 postfix (用来发送邮件)
sudo yum -y install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

# 安装社区版
# 添加 gitlab 包存储库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

# 安装 gitlab 包
yum install -y gitlab-ce

# 修改域名
vim /etc/gitlab/gitlab.rb
# 修改如下:(gitlab部署服务器的地址)
external_url 'http://192.168.1.120'

# 启动
sudo gitlab-ctl reconfigure
## 启动成功输出如下:
Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.

# 根据上面的启动提示查看默认密码
cat /etc/gitlab/initial_root_password
## 输出如下:
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: fHjc1aIVJDFsyzyGVTmWHaS6uMTmuPH4z8bDX1BO8RI=

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

复制初始密码,初次登录修改密码

centos7 安装 gitlab-runner

# 安装镜像
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

# 安装 runner
yum -y install gitlab-runner

# 查看版本信息
gitlab-runner -v 

# 将 gitlab-runner 授予 root 权限
ps aux | grep gitlab-runner
gitlab-runner uninstall
gitlab-runner install --working-directory /home/gitlab-runner --user root
service gitlab-runner restart

注册 runner :将 gitlab 实例和 gitlab-runner 绑定

【gitlab-runner 有两种形式:① 共享 share;② 特定 special】

下面教程为 特定 special runner ,既 runner 绑定具体项目。

runner 注册需要项目的 URL 和 token

# 注册
gitlab-runner register

## 示例:(如果打错字了,按ctrl + backspace 来删除)
[root@localhost /]# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=12108 revision=565b6c0b version=14.8.0
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.120   #1
Enter the registration token:
dzhxmoMcAc-DYAmFpGBX   #2![册成](C:\Users\yuyu\Desktop\centos7-gitlab-ci\图片\注册成功.png)
Enter a description for the runner:
[localhost.localdomain]: this is a test    #3
Enter tags for the runner (comma-separated):
shell   #4
Enter optional maintenance note for the runner:
runner by shell   #5
Registering runner... succeeded                     runner=Wrr7j3q6
Enter an executor: shell, docker+machine, docker-ssh+machine, kubernetes, custom, docker-ssh, parallels, docker, ssh, virtualbox:
shell   #6
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

#1:URL

#2: token

#3:runner 的描述

#4:.gitlab-ci.yml 里指定此 tag ,才会使用此 runner 构建

#5:没搞清楚有啥用,随便写

#6:执行方式,这里选择 shell

centos7 安装配置 JDK

cd /home

# 下载阿里的jdk8
wget https://github.com/alibaba/dragonwell8/releases/download/dragonwell-8.9.10_jdk8u312-ga/Alibaba_Dragonwell_8.9.10_x64_linux.tar.gz

# 解压
tar -xvzf Alibaba_Dragonwell_8.9.10_x64_linux.tar.gz 

# 配置环境变量
vim  /etc/profile 

# 末尾添加
export JAVA_HOME=/home/jdk8u312-b01
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

# 重新加载 source
source  /etc/profile 

# 测试是否安装成功
java -version

centos7 安装配置 maven

cd /home

# 下载包
wget http://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz

# 解压
tar -zxvf  apache-maven-3.8.4-bin.tar.gz 

# 配置环境变量
vim  /etc/profile 

# 末尾添加
export M2_HOME=/home/apache-maven-3.8.4
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

# 重新加载 source
source  /etc/profile 

# 测试是否安装成功
mvn -version

# 替换阿里云的源
vim /home/apache-maven-3.8.4/conf/settings.xml

# 找到<mirrors></mirrors>标签对,添加一下代码:
<mirror>
     <id>alimaven</id>
     <name>aliyun maven</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
     <mirrorOf>central</mirrorOf>
</mirror> 

centos7 安装配置 docker

# 安装工具
root@centos7: yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置yum源
root@centos7: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 生成缓存
root@centos7: yum makecache

# 安装最新稳定版本 Docker CE 
root@centos7:  yum install docker-ce docker-ce-cli containerd.io 

# 开机自启动
root@centos7:  systemctl enable docker
root@centos7:  systemctl start docker

# 配置docker下载源为国内镜像,centos和Ubuntu通用
# 新建镜像文件
root@linux: touch /etc/docker/daemon.json

vim /etc/docker/daemon.json
# 添加如下镜像地址
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

# 重新载入 daemon.json 使得服务生效
root@linux: systemctl daemon-reload
root@linux: systemctl restart docker

开放 2375 端口 (docker repository)

vim /usr/lib/systemd/system/docker.service

# 在 ExecStart=/usr/bin/dockerd 后插入 
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always


# 重启
systemctl daemon-reload 
systemctl restart docker 

# 查看结果
systemctl status docker 

spring boot 项目目录下添加以下两个文件

目录结构:

 

.gitlab-ci.yml

variables:
  DOCKER_DRIVER: overlay
  DOCKER_HOST: tcp://192.168.1.120:2375  # docker host
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  TAG: hello-knife4j:v0.6  # 项目打包成镜像后的名称:版本号

cache:
  paths:
    - .m2/repository    # maven 本地缓存的地址

stages:            # gitlab-ci 的两个阶段:
  - package        # 阶段一:package 打 jar 包,会用到 Dockerfile
  - deploy         # 阶段二:将项目 jar 包生成镜像,部署到 docker 中 

maven-package:
  tags:
    - shell        # runner 的 tags ,需要对应注册时的 tags
  stage: package
  script:          # 命令行打 jar 包命令
    - mvn clean package -Dmaven.test.skip=true
  artifacts:
    paths:         # 打包后的存放路径
      - target/*.jar
  only:            # 执行 ci 的分支(只有合并到 master 分支才会执行 ci)
    - master

build-master:
  image: docker:latest
  tags:
    - shell
  stage: deploy
  script:                          
    - docker build -t $TAG .      # 生成镜像
    - docker rm -f test || true   # 删除前一个版本的容器 (test 为镜像生成的容器的名字)
    - docker run -d --name test -p 17809:17809 $TAG  #(根据镜像生成容器,容器名字为 test ,绑定端口为 17809 (此端口为 spring boot 项目中指定的服务端口))
  only:
    - master

可直接复制上面的代码,但提交之前必须更改以下部分:

① DOCKER_HOST: tcp://192.168.1.120:2375 # docker host

② TAG: hello-knife4j:v0.6 # 项目打包成镜像后的名称:版本号

③ docker rm -f test || true # 删除前一个版本的容器 (test 为镜像生成的容器的名字)

④ docker run -d --name test -p 17809:17809 $TAG (根据镜像生成容器,容器名字为 test ,绑定端口为 17809 (此端口为 spring boot 项目中指定的服务端口))

Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY  /target/knife4j-spring-boot2-demo-1.0.jar app.jar   
ENV PORT 17809  
EXPOSE $PORT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dserver.port=${PORT}","-jar","/app.jar"]

可直接复制上面的代码,但提交之前必须更改以下部分:

① COPY /target/knife4j-spring-boot2-demo-1.0.jar app.jar

【knife4j-spring-boot2-demo-1.0 对应 pom 文件中的坐标】

 ② ENV PORT 17809 # 对应项目的服务端口

push 到 gitlab 上

本教程用的项目为 knife4j 的官方 demo:knife4j-spring-boot2-demo(swagger-bootstrap-ui-demo: knife4j 以及swagger-bootstrap-ui 集成框架示例项目 - Gitee.com

以 develop 分支 push 到 gitlab:(没有 ci)

 合并到 master 分支(触发 ci)

 查看 ci 进度

访问 http://192.168.1.120:17809/hello/test 查看

 访问 http://192.168.1.120:17809/doc.html 查看 knife4j 文档

查看项目打包出来的容器:

 查看项目打包出来的镜像:

参考链接:

centos7 安装 gitlab:

视频:GitLab 安装_哔哩哔哩_bilibili

centos7 安装 gitlab-runner:

视频:使用 GitLab Runner CICD 发布 java 项目_哔哩哔哩_bilibili

knife4j-spring-boot2-demo:

swagger-bootstrap-ui-demo: knife4j 以及swagger-bootstrap-ui 集成框架示例项目 - Gitee.com

猜你喜欢

转载自blog.csdn.net/qq_42183414/article/details/123145369
今日推荐