天天看点

记录一次gitlab-ci过程

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