Docker使用gitlab-runner实现cicd快速部署(未完)

目的

代码托管在gitlab,今天尝试使用gitlab-runner实现cicd,目标就是push代码,可以自动完成编译和部署步骤。

环境准备

  • Gitlab环境(我这里使用的是官方Gitlab)
  • 一台装了Docker的服务器(我这里使用的是腾讯云Centos 7.6)
  • 项目源代码
  • Dockerfile
  • .gitlab-ci.yml

安装Gitlab-runner

gitlab-runner可以直接安装(参考安装GitLab Runner),也可以使用docker安装,我这里采用docker安装(Docker安装Gitlab Runner):

  1. 启动gitlab runner镜像
1
2
3
4
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
  1. 配置注册gitlab runner

编写Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#
# BUILD 阶段
#
FROM golang AS build

# 设置我们工作目录
WORKDIR /go/src/gitlab.com/oott/cicddemo

# 添加所有需要编译的应用代码
COPY . .

RUN export GO111MODULE=on \
&& go env -w GOPROXY=https://goproxy.cn,direct \
&& go mod init \
&& go get -v

# 编译一个静态的go应用(在二进制构建中包含C语言依赖库)
RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-s -w" -installsuffix cgo -o app

#
# 生产阶段
#
FROM scratch AS prod

# 从buil阶段拷贝文件
COPY --from=build /go/src/gitlab.com/oott/cicddemo/app .
EXPOSE 8080/tcp
ENTRYPOINT [ "./app" ]

编写.gitlab-ci.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
stages:
- build
- deploy

job1:
stage: deploy
image: docker
# 执行Job内容
script:
# 通过Dockerfile生成cicddemo镜像
- docker build -t cicddemo .
tags:
# 执行Job的服务器
- demo
only:
# 只有在master分支才会执行
- master

job2:
stage: deploy
image: docker
# 执行Job内容
script:
# 删除已经在运行的容器
- if [ $(docker ps -aq --filter name= cicddemo) ]; then docker rm -f cicddemo;fi
# 通过镜像启动容器,并把本机8000端口映射到容器8000端口
- docker run -d -p 8080:8080 --name cicddemo cicddemo
tags:
# 执行Job的服务器
- demo
only:
# 只有在master分支才会执行
- master