之前一篇文章,我们对 GitLab(代码管理工具) 和 Runner (自动化编译部署工具)的安装进行了讲解,如果没看,去这里 =>GItLab + Runner 安装
这篇文章,我就将以搭建 gitbook 工具为例整个代码发布,自动化编译,部署过程记录下来。GitBook 是基于NodeJS 的一个文章发布工具。
代码部分:
1,GitLab 启动后,我们创建一个项目,Git 创建项目,这里不细说了,总之,就是创建一个项目。
2,我们 clone 代码到本地,然后在项目中进行内容编辑,我的项目结构 如下图,目录结构挺重要,否则后续编译docker镜像的时候,会有点麻烦,所以book和dockerfile是同级目录,在编译dockerfile的时候,方便copy
###项目说明
1,book 文件夹内所有内容,均为gitbook 书本内容
2,.gitlab-ci.yml Runner 自动化编译发布需要的配置文件
3,dockerfile 我们部署用到的dockerfile文件
### .gitlab-ci.yml 文件
variables:
WORKSPACES: /builds/$CI_PROJECT_PATH
DOCKER_IMAGE_NAME: gitbook
DOCKER_CONTAINER_NAME: gitbook
image: $DOCKER_IMAGE_NAME:latest
stages:
- deploy
deploy:
stage: deploy
tags:
- gitbook
only:
- master
script:
- docker stop $DOCKER_CONTAINER_NAME && docker rm -v $DOCKER_CONTAINER_NAME
- docker rmi -f $DOCKER_IMAGE_NAME
- docker build --no-cache --rm -t $DOCKER_IMAGE_NAME:latest .
- docker run -dit --name $DOCKER_CONTAINER_NAME -p 9999:15016 $DOCKER_IMAGE_NAME:latest
### dockerfile 文件
From nodejs:8.9
WORKDIR /gitbook
COPY book /gitbook
RUN npm install -g gitbook-cli &&\
gitbook init
CMD ["gitbook", "serve","--port","15016"]
自动化编译:
使用Renner做自动化,要先给项目注册Renner。
### 注册过程
sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register
# 因为之前我们的 gitlab-runner 环境是在 docker 中的, 所以,我们直接使用命令进行注册就好
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
URL(在GitLab 项目中进行查找)
Please enter the gitlab-ci token for this runner:
Token(在GitLab 项目中进行查找)
Please enter the gitlab-ci description for this runner:
[DESKTOP-2P9GHDD]: gitbook(描述)
Please enter the gitlab-ci tags for this runner (comma separated):
gitbook(这里就是 tags 了,通过这个标记来看是哪个执行)
Registering runner... succeeded runner=avuSXASJ Please enter the executor: docker-ssh,
parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine, docker:
这里是我们需要进行的CI/CD的执行者, 一般是docker 或者 shell,没什么太大区别,我使用 shell,
如果选择 docker 的话, 后面还会有一个让你输入镜像名称和版本的操作,shell会直接完成。
Runner registered successfully. Feel free to start it, but if it's running already the
config should be automatically reloaded!
这里是完成
URL 和 Token 配图
在 yum 文件中,我们可以对整个 CI/CD 生命周期进行定制(上述代码包含了编译部署),我们可以单独定制编译,可以单独定制测试或者部署,配置内容详解,去官方查看即可,这里我会解释我的配置中用到的东西。
variables: 变量的设置
image: 使用的镜像
stages: CI CD 的过程(我只有部署 deploy, 还可以 build , test 自定义 等)
deploy: 执行过程的名字
stage: CI/CD 过程类型
tags: 这里是 Runner Register 的时候设置的标记,有了它才能进行CI/CD
script: CI/CD 过程中需要的脚本
only: 代码分支,或者代码标记等,都可以
部署:
不管是编译,还是测试,还是部署,其中是需要一个过程的思路的,我做的是GitBook环境,加自动化提交代码 CI/CD 过程。那么我要部署 GitBook 大概思路是,获取代码,编译,运行,那么我们一步步来结局。
获取代码:这里其实是不用去管的,Renner会自动从 GitLab 拉取代码,在CI 整个过程中,gitlab-runner 用户(Renner会自动创建一个用户)会一直在项目代码的根目录,除非你需要代码放到其他地方去。
编译:每个工程编译过程都不一样,node/c#/java 或者其他的工具,每种都不同,选择一款自己需要的,GitBook 有自动化编译命令 init
部署:在上面的内容中,部署的过程是需要写入 script 标签下脚本中的,这里才是部署的真正过程,当然, 我的编译过程,也会在里面,这里是我部署的整个过程,我的代码编译放进了镜像编译的过程内,
### 停止已运行的容器 并 删除该容器
- docker stop $DOCKER_CONTAINER_NAME && docker rm -v $DOCKER_CONTAINER_NAME
### 删除原有镜像
- docker rmi -f $DOCKER_IMAGE_NAME
### 重新生成镜像(gitbook生成实在dockerfile过程中进行 init 操作的)
- docker build --no-cache --rm -t $DOCKER_IMAGE_NAME:latest .
### 启动容器
- docker run -dit --name $DOCKER_CONTAINER_NAME -p 9999:15016 $DOCKER_IMAGE_NAME:latest
dockerfile 中 gitbook init
### dockerfile 文件中 npm 安装gitbook 并 初始化init书籍(编译)
RUN npm install -g gitbook-cli && gitbook init
### 启动gitbook服务
CMD ["gitbook", "serve","--port","15016"]
这时候,我们整个过程就结束了,我们就可以通过浏览器访问自己的gitbook了
致:踩过的那些坑
可以看我的码云:去码云看看
本章到此结束