# git-cicd
**Repository Path**: tianwstudy/git-cicd
## Basic Information
- **Project Name**: git-cicd
- **Description**: 内网环境下的cicd部署,可能有些资源跟实际情况不一样,注意实际使用环境
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2024-04-25
- **Last Updated**: 2024-06-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 后端CICD部署流程
### 1. 环境配置
#### 1.1 jdk配置
- http://192.168.8.218:10010/java/

- 上传解压到对应目录下,配置环境变量(**这里路径和名称按自己的来**)
```shell
vim /etc/profile
export JAVA_HOME=/usr/local/jdk8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH:
```
- source /etc/profile !!!!! 这里别忘了
- 查看配置状态

#### 1.2 maven配置
- http://192.168.8.218:10010/maven/
- 配置环境比变量
```shell
vim /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=${PATH}:${MAVEN_HOME}/bin
```
- source /etc/profile !!!

- 解压到对应目录后修改 setting.xml文件 (在解压后的conf目录下)
```yaml
/root/m2/repository 仓库地址按需修改
私服地址和登录账号
maven-releases
admin
admin123
maven-public
admin
admin123
maven-public
*
maven-public
http://192.168.8.212:8081/repository/maven-public/
maven-releases
*
maven-releases
http://192.168.8.212:8081/repository/maven-releases/
```
#### 1.3 docker及docker-compose安装
- http://192.168.8.218:10010/docker/

- 下载上传到服务器解压后先安装docker再compose
rpm -ivh ./* --nodeps --force
- 启动docker,查看状态
```sh
systemctl start docker
docker -v
```

- 修改配置文件(如果文件不存在新建文件)
vim /etc/docker/daemon.json
```shell
{
"log-driver": "json-file",
"log-opts": {"max-size": "100m","max-file": "1"},
"exec-opts": ["native.cgroupdriver=systemd"],
"graph": "/var/lib/docker",
"registry-mirrors": ["http://192.168.8.212:8081"],
"insecure-registries": ["192.168.8.212:8083","192.168.8.212:8084"]
}
```
- 重启docker使其生效
```shell
systemctl daemon-reload
systemctl restart docker
```
- 登录nexus私服测试
docker login -u admin -p admin123 192.168.8.212:8084

- docker-compose安装
1.进入docker-compose解压后所在目录
cd /usr/local/docker/docker-compose-linux-x86_64
2.将下载的docker-compose-linux-x86_64移动到/usr/local/bin目录下,并重命名为docker-compose
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
3.添加可执行权限
chmod +x /usr/local/bin/docker-compose
4.测试是否安装成功
docker-compose -v

- gitlab-runner安装
1、下载镜像:docker pull 192.168.8.212:8084/gitlab-runner:latest
2、修改镜像名称:docker tag 192.168.8.212:8084/gitlab-runner:latest gitlab-runner:latest 按照自己需要是否修改
3、编写docker-compose.yml
```yaml
version: "3"
services:
git-runner:
restart: always
image: gitlab/gitlab-runner:latest #刚才下载的镜像名称
container_name: git_runner
privileged: true #以管理员身份进行
volumes: #所有挂载目录冒号前面的根据自己情况更改,不必与此保持一致
- /export/piesat/gitlab-runner/config/config.toml:/etc/gitlab-runner/config.toml #提前在本地按对应目录创建config.toml
- /var/run/docker.sock:/var/run/docker.sock #用于runner容器共享宿主机的docker
- /root/.docker/:/root/.docker/
- /etc/docker/daemon.json:/etc/docker/daemon.json
- /usr/local/apache-maven-3.8.6:/usr/local/apache-maven-3.8.6 #maven所造目录
- /usr/local/bin:/usr/local/bin
- ./settings.xml:/usr/local/apache-maven-3.8.6/conf/settings.xml #可以吧maven下的配置文件拷贝过来方便以后修改
```
4、运行:docker-compose up -d
5、查看运行状态:docker ps -a|grep git

至此,所有的前期环境基本准备好了
### 2. GitLab与GitLabRunner关联
#### 2.1 GitLab找到要关联的项目 setting -> CICD -> Runners-settings

#### 2.2 展开Runner详情

#### 2.3 在gitlab-runner注册项目runner
- 进入gitlab-runner容器 :docker exec -it git_runner /bin/bash
- 注册项目runner
```sh
root@7bda3f9841d5:/#
root@7bda3f9841d5:/# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=99 revision=5316d4ac version=14.6.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.8.198:10003/ #输入上面图中的地址
Enter the registration token:
8dd6TM9smNcfRiwNkMza #输入上图中的token
Enter a description for the runner:
[7bda3f9841d5]: 自动集成部署 #描述信息
Enter tags for the runner (comma-separated):
run-springboot #这个是当前runner的tag,重要,相当于别名,后面的.gitlab-ci.yml中的job会用到,指定哪个tag来执行任务
Registering runner... succeeded runner=8dd6TM9s
Enter an executor: docker, shell, ssh, kubernetes, docker+machine, docker-ssh+machine, custom, docker-ssh, parallels, virtualbox: #运行模式选择,这里使用docker,也可以选择shell
docker
Enter the default Docker image (for example, ruby:2.6):
192.168.8.212:8084/jdk-font:1.8 #指定基础镜像
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
root@7bda3f9841d5:/#
```
出现successfully则构建成功!!!
- 查看所有runner

- 删除runner
```shell
gitlab-runner verify --delete --token 7612a033a5cbb06559ee1ef6685db0 --url http://192.168.8.198:10003/
```
#### 2.4 gitlab页面查看关联情况

#### 2.5 修改配置文件
由于这里使用的docker启动服务,对配置文件进行的挂载,可以方便修改
vim config.toml 需要加入修改下面红色框中的东西

```
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache", "/root/m2/repository:/root/m2/repository","/root/.docker/:/root/.docker/","/usr/bin/docker:/usr/bin/docker","/usr/local/jdk8:/usr/local/jdk8","/usr/local/apache-maven-3.8.6/:/usr/local/apache-maven-3.8.6/","/usr/local/bin/docker-compose:/usr/local/bin/docker-compose","/export/piesat/emsp:/export/piesat/emsp"]
pull_policy = "if-not-present"
#目录挂载根据自己实际情况做修改
```
- docker 登录认证相关查看 :cat /root/.docker/config.json
- 重启docker :docker-compose restart
### 3. .gitlab-ci.yml编写
```yaml
#定义全局环境变量配置
variables:
NAME: efficiency-manage-1.0.0.jar
#docker 镜像名称
IMAGE_NAME: emsp:1.0
#docker容器运行名称
CONTAINER_NAME: emsp
#生产服务器jar包存放目录
service_home: /export/piesat/emsp
before_script:
- export MAVEN_HOME=/usr/local/apache-maven-3.8.6
- export DOCKER_COMPOSE=/usr/local/bin
stages:
- test_env
- compile
- build
- run
cache:
paths:
- /root/m2/repository #设置cache,不用每次构建都去下载依赖
#任务1 查看环境
test_env:
stage: test_env
tags:
#这里写gitlab与gitLabRunner绑定时候输入的tag,这样job会使用当前runner跑任务
- run-springboot
script:
- $MAVEN_HOME/bin/mvn -v
- docker -v
- $DOCKER_COMPOSE/docker-compose -v
#构建jar包
compile:
stage: compile
allow_failure: false
#指定构建的分支
only:
- master
tags:
- run-springboot
#运行脚本
script:
- echo "====================开始打包===================="
- $MAVEN_HOME/bin/mvn clean compile
- $MAVEN_HOME/bin/mvn package -Dmaven.test.skip=true
- echo "====================打包结束===================="
- pwd
- whoami
#将文件上传到服务器
after_script:
- cp ./target/${NAME} ${service_home}
- cp ./docker/Dockerfile ${service_home}
- cp ./docker/docker-compose.yml ${service_home}
- cp ./src/main/resources/application.properties ${service_home}
- cp ./src/main/resources/application-dev.yml ${service_home}
artifacts:
name: $NAME
expire_in: 5 min #设置maven打包的jar定时移除时间,默认单位sec,其他单位mins,
paths:
- target/*.jar
#构建docker镜像
build:
stage: build
script:
- cd ${service_home}
- chmod 777 ./*
- docker build -t ${IMAGE_NAME} .
after_script:
- docker images |grep ${IMAGE_NAME}
- rm -rf target
only:
- master
tags:
- run-springboot
#运行任务
run:
stage: run
script:
- cd ${service_home}
- $DOCKER_COMPOSE/docker-compose down
- $DOCKER_COMPOSE/docker-compose up -d
after_script:
- docker ps -a|grep ${CONTAINER_NAME}
only:
- master
tags:
- run-springboot
```
将写好的yml文件上传到项目的根目录下,gitlab会自动识别并开始构建,具体情况如下:

构建任务详情,点击每一个任务可查看其运行日志
