简化工作流程,提高工作效率 --打工人
介绍
功能:持续集成 持续部署。
优点:gitlab官方推行工具,简单易用
案例使用
tips:使用服务器,并具备docker的基础知识
- gitlab project settings
进入项目的settings页面中,打开piplines选项,保存设置。显示CI/CD按钮
没有settings是因为你没有管理员权限
-
gitlab ci/cd
进入settings中的ci/cd页面,展开 runners选项卡,显示gitlab-runner配置。url和token要记录下来,一会要用。下方的runner就是我们项目中已经注册好的,并且显示各自的状态和介绍
- gitlab-runner
follow me
docker pull gitlab/gitlab-runner:latest # 拉取镜像
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner
# --restart always 浏览器重启策略 always 在容器推出时总是重启容器
# -v 映射 将原文件/目录 映射到目标文件/目录
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
# 使用一次性容器来便捷注册
# --rm 容器推出时清理用户数据
- 注册runner,填写信息 紧接着上个步骤
url ==》步骤2图中的url
token ==》步骤2图中的token
description ==》步骤2图中展示的name
tags ==> 步骤2中tags,可以写多个,英文逗号隔开 maintenance ==> 维护说明,可写可不写
executor ==> docker,优点多多
docker-images ==> alpine:latest 小且美的操作系统镜像,自带包管理apk
完成后 此时gitlab就会展示注册的runner
- 在编辑项目gitlab-ci.yml前,需要提前解决两个问题
- gitlab-runner权限问题
原因:用户操作docker、创建删除文件需要添加权限 解决:给gitlab-runner用户设置root权限
useradd -m -g gitlab-runner gitlab-runner # 添加 用户组 + 用户
sudo vim /etc/passwd # 查看系统用户
# 将下面图中位置数字改为0:0 和root相同
- 文件传输需要密码问题 原因:后续需要将拉去的项目代码映射到服务器中,需要服务器密码 解决:ssh配置
cd ~/.ssh # 查看是否存在密钥
ssh-keygen -t rsa # 生成密钥
cat id_rsa #查看私钥
cat id_rsa.pub # 查看公钥
将私钥、公钥、ip等信息存放在项目CI/CD的公共变量中,在gitlab-ci.yml文件中使用
- gitlab-ci.yml
先简单叙述下编写规则,直接写案例,详细教学
# 后可以写注释
# 缩进代表层级 - 代表上一级是数组(列表)
before_script: # 编译前输出
- echo '开始'
after_script: # 编译后输出
- echo '结束'
catch: # 缓存
key: 'test'
paths:
- 'node_modules/'
- 'dist/'
stages: # 定义构建阶段
- install # 每个阶段名字。可以随意命名
- build
- deploy
job1:
image: node # 镜像名
stage: build: # 阶段
script:
- npm i
- npm run build
only:
- 定义执行规则
tags:
- tag # 对应每个runner注册时写的tag,对应上的runner执行
artifacts: # 传递打包文件
expire_in: 1 week # 工件有效期
paths: # 缓存目录
- dist
案例:::项目增加gitlab-ci.yml, test分支更新就会执行
cache: # 缓存
key: $CI_PROJECT_NAME
paths:
- node_modules/
- dist/
before_script:
- echo $CI_COMMIT_REF_NAME # tag名或者分支名
job1:
image: node
stage: build
script:
- npm i
- npm run build
only: # 定义哪些分支或标签会运行 except 定义哪些分支或标签不会运行
- test
tags: # 指定runner
- tag
artifacts: # 传递打包文件
expire_in: 1 week # 工件有效期
paths: # 缓存目录
- dist
job2:
image: alpine
stage: deploy
script:
- echo "http://mirrors.aliyun.com/alpine/v3.7/main/" > /etc/apk/repositories # 下载镜像
- apk add --no-cache rsync openssh # 安装rsync openssh
- mkdir -p ~/.ssh
- echo "$SSH_KEY_PRIVATE" >> /root/.ssh/id_rsa
- echo "$SSH_KEY_PUB" >> /root/.ssh/id_rsa.pub
- chmod 700 /root/.ssh/ # 密钥文件需要对应权限 过高过低都不行
- chmod 600 /root/.ssh/id_rsa.pub
- chmod 600 /root/.ssh/id_rsa
- echo -e "Host *\n\t StrictHostKeyChecking no \n\n" > ~/.ssh/config # 信任连接
- rsync -av --delete ./dist/ $SERVER_HOST:$SERVER_PATH # 文件映射
only:
- test
tags:
- tag
7.查看CI/CD pipelines
点击进程可以查看详情
成功之后我们更新的dist文件就到了服务器的静态文件夹中
- nginx发布
docker pull nginx:latest
docker run --name test -p 8087:80 -v /静态文件夹:/usr/share/nginx/html -d nginx
# -p 端口映射
# -d 后台运行
完成撒花🎉🎉🎉
个别问题
- 有的同学服务器是在内网中的,项目中给出的URL是内网域名而不是IP,那么我们在注册runner的时候url输入http:// + ip, 然后sudo打开 /srv/gitlab-runner/config/config.toml ,对runner增加域名:ip映射
遇到有关问题持续更新
参考文章: