我正在参加「掘金·启航计划」
CI/CD 这部分我们用两种方式,前面我们已经搭建了基于jenkins的CI/CD过程
本文视频讲解 gitlab配置CI/CD全过程
参考文档: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状态
- 进入
setting -> CI/CD -> Runners
- 点击
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执行即可
执行最后一步:gitlab-runner register --url http://192.168.1.101:30300/ --registration-token b-Hc_TqwYRUPcYaDxMR1,一直点下一步就
Enter an executor,写shell
最后配置完成,可以看到多了active的runner
添加权限
查看是否有权限,看到报错 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隐藏
设置ssh密钥
在服务器上执行
ssh-keygen
Enter file in which to save the key (/root/.ssh/id_rsa): 输入文件路径
/root/.ssh/mygitlab_key
在这个路径下会生成mygitlab_key和mygitlab_key.pub两个文件,需要额外操作将公钥内容应用到服务器,或者云服务器,参考 设置 SSH 通过密钥登录
将私钥内容给gitlab参数
获取密钥在gitlab参数添加SSK_KEY,file类型
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
给权限
chmod 777 /var/run/docker.sock