目的
代码托管在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):
- 启动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
|
- 配置注册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
|
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
RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-s -w" -installsuffix cgo -o app
FROM scratch AS prod
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 script: - docker build -t cicddemo . tags: - demo only: - master
job2: stage: deploy image: docker script: - if [ $(docker ps -aq --filter name= cicddemo) ]; then docker rm -f cicddemo;fi - docker run -d -p 8080:8080 --name cicddemo cicddemo tags: - demo only: - master
|
