目录
开放 2375 端口 (docker repository)
前提条件
教程环境时间: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:
centos7 安装 gitlab-runner:
视频:使用 GitLab Runner CICD 发布 java 项目_哔哩哔哩_bilibili
knife4j-spring-boot2-demo:
swagger-bootstrap-ui-demo: knife4j 以及swagger-bootstrap-ui 集成框架示例项目 - Gitee.com