1.安装一个gitlab服务器
2.项目代码以go语言项目为基础
cicd项目包括
1)main.go
package main
import (
"net/http"
)
func main() {
//注册一个函数,响应某一个路由
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello CICD"))
})
//启动端口服务
http.ListenAndServe(":8000", nil)
}
(2)Dockerfile
FROM golang:latest
MAINTAINER zheng
# 镜像中项目路径
WORKDIR $GOPATH/src/kun.com/cicd-demo
# 拷贝当前目录代码到镜像
COPY . $GOPATH/src/kun.com/cicd-demo
# 制作镜像
RUN go build .
# 暴露端口
EXPOSE 8000
# 程序入口
ENTRYPOINT ["./cicd-demo"]
(3) gitlab ci的重要文件 .gitlab-ci.yml
stages:
- deploy
docker-deploy:
stage: deploy
# 执行Job内容
script:
- echo "你好"
# 通过Dockerfile生成cicd-demo镜像
- sudo docker build -t cicd-demo .
# 删除已经在运行的容器
- if [ $(sudo docker ps -aq --filter name= cicd-demo) ]; then sudo docker rm -f cicd-demo;fi
# 通过镜像启动容器,并把本机8000端口映射到容器8000端口
- sudo docker run -d -p 8000:8000 --name cicd-demo cicd-demo
tags:
# 执行Job的服务器
- kubernetes-runner
only:
# 只有在master分支才会执行
- master
3.上传代码到gitlab服务器
本地的文件名字必须和你gitlab上的仓库一样*
不然上传不了
cd ci/
git init
git remote add origin http://172.16.100.133:8090/root/springbootdemo.git
git add .
git commit -m “Initial commit”#每次提交说明
git push -u origin master
4.安装 gitlab-runner
(1)# 镜像复用的官方镜像:gitlab/gitlab-runner:v10.0.0
docker run -d --name gitlab-runner-v10.0.0 --restart always \
-v /data/apps/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
gitlab/gitlab-runner:v10.0.0
(2)注册runner
docker exec -it gitlab-runner-v10.0.0 /bin/bash
容器里面输入 gitlab-runner register
开始注册
最重要的就是在gilab cicd 中找到
指定url
指定的 token
注册到gitlab-runner容器中
可以选择 shell,docker ,kubernetes
作为 gitlab-runner 运行环境
5.由于这些步骤在容器内执行
而不以root用户执行,而是以gitlab-runner用户执行
sudo groupadd docker #添加docker用户组
sudo gpasswd -a gitlab-runner docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
su gitlab-runner #切换到runner用户组
docker ps #测试docker命令是否可以使用sudo正常使用
sudo docker ps #可以执行
sudo时候需要密码,我做了免密登陆操作
由于帐号并没有开启免密码导致的
假设当前帐号为abc
切换到root下
1 打开sudoers
vi /etc/sudoers
2 添加免密码
abc ALL = NOPASSWD: ALL