gitlab配置CI/CD全过程(带视频)

1,597 阅读4分钟

我正在参加「掘金·启航计划」

CI/CD 这部分我们用两种方式,前面我们已经搭建了基于jenkins的CI/CD过程

本文视频讲解 gitlab配置CI/CD全过程

可以查看 手把手搭建CICD-k8s全流程(带完整视频)

参考文档:Gitlab Ci中自动生成版本号GitLab CI CD Tutorial for Beginners设置 SSH 通过密钥登录

建议配合视频,查看整体过程:

本地服务器centos7 装 gitlab gitlab-runner DockerHub

1、设置国内docker镜像源

2、docker pull 装gitlab-ce

3、改gitlab默认root密码

4、修改gitlab host和port

5、Docker Hub上建账号密码和仓库bashi-admin-web

6、gitlab上传源码

7、安装 gitlab-runner

8、服务器装git最新版

9、添加CI/CD参数 HARBOR_USER、HARBOR_PASSWORD、SSH_KEY 公钥给web服务器,私钥给gitlab

10、添加gitlab-runner权限 sudo usermod -aG docker gitlab-runner

11、编写Dockerfile文件

12、编写.gitlab-ci.yml文件

13、运行pipeline

我们再用基于gitlab的CI/CD,不用jenkins,编写.gitlab-ci.yml实现以下几步:

  • 执行 docker build 相关,Dockerfile中执行 npm run build 编译源代码,封装nginx镜像,并推送到 Harbor 服务器

  • shell 登录远程web服务器,执行 docker run 更新应用

1、安装 gitlab

查看Gitlab安装部分,手把手搭建CICD-k8s全流程(带完整视频)

2、安装 harbor

查看Harbor安装部分,手把手搭建CICD-k8s全流程(带完整视频)

3、安装 Runner

.gitlab-ci.yml里面会定义很多job任务,这些任务是运行在 gitlab runner 服务上,所以我们需要先安装Runner,否则CI/CD流水线会一直pending状态

image.png

  • 进入 setting -> CI/CD -> Runners

image.png

  • 点击 Show Runner installation instructions,根据弹出内容在centos上执行,最后一句要替换成自己的地址和token

可以看到 --url http://3dce62f31a1b,这里不行,按照以下修改成具体地址

修改gitllab显示的clone地址,不然是一串数字乱码

docker exec -it -u root gitlab bash
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
修改地址 host: 192.168.1.10
gitlab-ctl restart

注意如果报错sudo: gitlab-runner: command not found,去掉sudo执行即可

image.png

image.png

执行最后一步:gitlab-runner register --url http://192.168.1.101:30300/ --registration-token b-Hc_TqwYRUPcYaDxMR1,一直点下一步就

  • Enter an executor ,写 shell

image.png

最后配置完成,可以看到多了active的runner

image.png

添加权限

查看是否有权限,看到报错 ERROR: Got permission denied

sudo -u gitlab-runner -H docker info

如果看到报错,那执行下面

sudo usermod -aG docker gitlab-runner

再次执行

sudo -u gitlab-runner -H docker info

报错消失,看到配置参数了

登录Dockerhub

denied: requested access to the resource is denied

先在DockerHub服务器登录,去建仓库

安装git 2.31.1

#安装源  
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm  
#安装git  
yum install git  
#更新git  
yum update git

.gitlab-ci.yml编辑

内容分为两步:

  • 执行 docker build 相关,Dockerfile中执行 npm run build 编译源代码,封装nginx镜像,并推送到 Harbor 服务器

  • shell 登录远程web服务器,执行 docker run 更新应用

建立参数

添加DockerHub登录账号密码

进入 setting -> CICD -> Variables,HARBOR_USER,HARBOR_PASSWORD,后面需要用到的登录参数,勾选masked隐藏

image.png

设置ssh密钥

在服务器上执行

ssh-keygen

Enter file in which to save the key (/root/.ssh/id_rsa): 输入文件路径

/root/.ssh/mygitlab_key

在这个路径下会生成mygitlab_keymygitlab_key.pub两个文件,需要额外操作将公钥内容应用到服务器,或者云服务器,参考 设置 SSH 通过密钥登录

将私钥内容给gitlab参数

image.png

获取密钥在gitlab参数添加SSK_KEY,file类型

image.png

Dockerfile

项目根目录新建Dockerfile文件,内容如下:

# compile
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install --registry=https://registry.npm.taobao.org
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

.gitlab-ci.yml

variables:
  DOCKERHUB_REP: rootegg
  PROJECT_NAME: bashi-admin-web


stages:
  - build
  - deploy


docker-job: 
  stage: build 
  image: docker
  services:
    - name: docker:dind
  #    command: ["--insecure-registry=192.168.xx.xx:8082"]    
  script:
    - echo "Running docker build."
    - VERSION=`date +%Y%m%d%H%M`
    - echo "VERSION=$VERSION" > .version
    - docker build -t $DOCKERHUB_REP/$PROJECT_NAME:$VERSION .
    - docker login -u $HARBOR_USER -p $HARBOR_PASSWORD
    - docker push $DOCKERHUB_REP/$PROJECT_NAME:$VERSION
    - echo "Docker build complete."
  artifacts:
    paths:
      - .version  # 版本号传递到下一个job
    expire_in: 1 days
  only:
    - master
    - merge_requests

deploy-job:      
  stage: deploy 
  before_script:
    - chmod 400 $SSH_KEY
  script:
    - echo "Deploying application..."
    - if [ ! -f ./.version ];
      then
        echo "任务执行失败,请先执行build任务!";
        exit 1;
      fi
    - source ./.version
    - ssh -o StrictHostKeyChecking=no -i $SSH_KEY root@175.178.1.249 "
        docker login -u $HARBOR_USER -p $HARBOR_PASSWORD && 
        docker ps --filter "name=$PROJECT_NAME" -aq | xargs -r docker rm -f &&
        docker run -d --name $PROJECT_NAME -p 8080:80 $DOCKERHUB_REP/$PROJECT_NAME:$VERSION"
    - echo "Application successfully deployed."
  only:
    - master
    - merge_requests

遇到问题

升级git,centos下载的git是1.8.3.1,升级到最新版

建议使用 git 简单安装 2.31.1

#安装源  
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm  
#安装git  
yum install git  
#更新git  
yum update git

源码安装

yum install -y git

wget https://github.com/git/git/archive/v2.27.0.tar.gz -O git.tar.gz

yum install -y curl-devel expat-devel openssl-devel zlib-devel asciidoc

yum install -y gcc perl-ExtUtils-MakeMaker

tar -zxvf git.tar.gz

cd git-2.27.0

make prefix=/usr/local/bin/git all

make install

echo "export PATH=$PATH:/usr/local/bin/git/bin" >> /etc/profile && source /etc/profile

git --version

image.png

给权限

chmod 777 /var/run/docker.sock

image.png