一、安装Gitlab
1.准备工作
以Centos7为例,准备一台至少内存为 4G 的机器
2.安装依赖软件
sudo yum install -y git vim gcc glibc-static telnet
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
3.设置gitlab安装源
vi /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
4.安装Gitlab
sudo yum install -y gitlab-ce
# 安装完成后可以使用下面的命令进行启动配置
sudo gitlab-ctl reconfigure
# 查看状态
gitlab-ctl status
5.登录和修改密码
根据提示修改初始密码,然后创建账号,再创建一个项目,就算安装完成了。
二、GitLab CI 服务器的搭建
现在我们换一台机器安装
1.安装Docker
// todo
2.安装gitlab ci runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
yum install gitlab-ci-multi-runner -y
# 查看是否运行正常
gitlab-ci-multi-runner status
# 设置docker 权限
usermod -aG docker gitlab-runner
service docker restart
gitlab-ci-multi-runner restart
3.注册一个runner
进入到demo 里面,点击如图位置
ps: demo 项目是一个maven 管理的 springboot 项目,可以自行创建
这两个值后面会用到,先进入到这个页面,然后开始注册runner
gitlab-ci-multi-runner register
# 如下图所示配置
192.168.31.188 这个机器是安装docker 和 gitlab ci 的机器
注册好之后,可以看到
然后我们重启一下runner ,就可以正常使用了。
gitlab-ci-multi-runner restart
现在为止,gitlab 的工作是准备好了。
三、配置项目
安装下maven 和 jdk
主要是Dockerfile 和 .gitlab-ci.yml 这两个文件
Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8086
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
cache:
key: maven-repository-cache
paths:
- /usr/local/maven/repo
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/usr/local/maven/repo"
# 本次构建的阶段:build package
stages:
- compile
- package
- dock
# 构建 Job
build:
stage: compile
tags:
- maven
script:
- echo "=============== 开始编译构建任务 ==============="
- mvn compile
# 打包
package:
stage: package
tags:
- maven
script:
- echo "=============== 开始打包任务 ==============="
- mvn package -Dmaven.test.skip=true
artifacts:
paths:
- target/*.jar
dock:
stage: dock
tags:
- maven
script:
- docker build -t xin-demo .
- if [ $(docker ps -aq --filter name=demo) ]; then docker rm -f demo;fi
- docker run -d -p 8086:8086 --link=mysqldx:mysql --name demo xin-demo
// 如果容器已经存在的话,就先删除
- if [ $(docker ps -aq --filter name=demo) ]; then docker rm -f demo;fi
// 这里可以将maven 打包好的文件传递给下一个 stage ,然后下一步的docker 就可以根据 这个 jar 包 和Dockerfile 构建镜像artifacts: paths: - target/*.jar// 这里--link 连接到了另一个mysql 容器的网络,在项目里面可以使用 mysql 代替 mysql的 ip 地址
// eg: jdbc:mysql://mysql:3306/test- docker run -d -p 8086:8086 --link=mysqldx:mysql --name demo xin-demo
然后我们将代码提交到 gitlab ,就可以进行自动 CI/CD了。
docker 会自动运行容器,然后我们可以请求下项目里面的接口测试下。
可以看到已经可以正常返回了。这样我们就可以把代码提交到gitlab 上之后让它自己进行自动的 测试部署了,很方便吧。当然不一定每次修改了都要进行构建镜像发布,我们把stage运行做一个限制,让它只在master 分支合并的时候进行构建镜像与部署。