gitlab CI/CD自动化部署

文章目录

  • 1. gitlab Runner
    • 1.1 安装gitlab Runner
    • 1.2 注册runner
  • 2. .gitlab-ci.yml的书写
  • 3. 部署
    • 3.1 docker方式部署
    • 3.2 OSS部署

CI/CD 是一种持续开发软件的方法,可以不断的进行构建、测试和部署代码迭代更改。

一套完整的gitlab CI/CD配置包括:

  • gitlab Runner的安装及注册
  • 项目.gitlab-ci.yml的书写
  • 项目的部署

1. gitlab Runner

gitlab Runner 是一个开源项目,用于运行作业并将结果发送回gitLab.

前提:已部署gitlab

1.1 安装gitlab Runner

# 登录远程服务器,拉取gitlab-runner镜像
docker pull gitlab/gitlab-runner

# 启动容器
sudo docker run -d \
--name gitlab-runner \
--restart=always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

docker ps

1.2 注册runner

通过gitlab获取 注册令牌 去注册Runner,并返回了身份验证令牌,自动添加到runner的配置文件config.toml中。然后将 GitLab 和 Runner 连接起来。

  • 获取注册令牌
    根据需要注册全局或者针对某个项目的runner

    • 1)获取全局令牌
      登录管理员账号 => 管理员 => CI/CD->Runners->注册一个实例runner , 复制注册令牌(1iekpZaY9HxhHmaEDvLj)
      gitlab CI/CD自动化部署_第1张图片
      gitlab CI/CD自动化部署_第2张图片
      gitlab CI/CD自动化部署_第3张图片
    • 2)某一个项目的令牌
      gitlab CI/CD自动化部署_第4张图片
  • 注册runner

# http://119.45.234.152:13800 gitlab的地址
# 1iekpZaY9HxhHmaEDvLj  注册令牌(全局或者针对某一个项目的令牌)
# 警告1,注意1
docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:latest \
  --url "http://119.45.234.152:13800" \
  --registration-token "1iekpZaY9HxhHmaEDvLj" \
  --description "for-testproject" \
  --tag-list "vue" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

注册成功后,会在相关项目看到注册的runner
gitlab CI/CD自动化部署_第5张图片

警告1WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
gitlab CI/CD自动化部署_第6张图片
原因:runner 15.6版本后以后注册不支持带参
https://gitlab.com/gitlab-org/gitlab/-/issues/380872


注意1:如果注册成功后进入gitlab查看runner提示 Runner has never contacted this instance
注册文件有问题,删除后重新试

cd /srv/gitlab-runner/config/
ll
# 删除配置文件
rm -rf config.toml

2. .gitlab-ci.yml的书写

关键字详见官网: https://docs.gitlab.com/ee/ci/yaml/
在项目根目录新建.gitlab-ci.yml文件。每次提交都会触发该流水

# 指定使用node作为基础环境镜像
# 经常用到的镜像有node java python docker
image: node:alpine

# 全局关键词:定义阶段,任务根据这里的顺序执行
# 不指定的话默认是test
# 官方提供的stage有5个,阶段有执行顺序:.pre => build => test => deploy =>.post
# 这里我自己自定义 install build deploy
stages:
  - install 
  - build   
  - deploy   

# 配置缓存 
# 将当前工作环境目录中的一些文件,一些文件夹存储起来,用于在各个任务初始化的时候恢复
cache:
  key: testproject-cache
  paths:
    - node_modules

# 1.安装      
job_install:
  # 任务内的阶段,必须从全局阶段stages中选
  stage: install
  # 标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-list
  tags:
    - vue
  # 定义该job执行的脚本
  script:
    - npm install

# 2.编译   
job_build:
  stage: build
  tags:
    - vue
  script:
    - npm run build
  # 失败后重试次数
  retry: 2
  # 只有指定的分支提交才会执行
  # only:
  #  - test

# 3.部署
job_deploy:
  stage: deploy
  tags:
    - vue
  script:
    - echo 'start deploy'
  # 这里目前用的是手动部署,自己去gitlab ci/co里面点击。打印的是字符串
  # 下面会针对部署完善
  when: manual  # manual 手动执行任务

gitlab CI/CD自动化部署_第7张图片

3. 部署

3.1 docker方式部署

  • 修改.gitlab-ci.yml文件
# 3.docker方式部署
job_deploy:
  variables:
    imgname: "test-project" # 镜像名称。不能有大写字母
    containername: "h5-container" # 容器名称
  stage: deploy
  image: docker  # script中有用到docker镜像
  tags:
    - vue
  script:
    - docker build -t $imgname .
    # 使用docker命令去搜索docker容器里面是否有一个name 为 containername定义的变量名的容器,如果有,就删除这个容器
    - if [ $(docker ps -aq --filter name=$containername) ]; then docker rm -f $containername;fi
    - docker run -d -p 8082:80 --name $containername $imgname
    # 部署成功后访问http://119.45.234.152:8082
    - echo "deploy docker image success.visit http://119.45.234.152:8082"
  when: manual  # manual 手动执行任务
  • 编写Dockerfile
    项目根目录创建文件Dockerfile
FROM node:latest as builder
# 维护者信息
MAINTAINER susoft
# 指定工作文件路径
WORKDIR /app
# 把文件内容复制到docker容器里面
COPY package.json .
# RUN用于在镜像容器中执行命令
RUN npm install --registry=http://registry.npm.taobao.org
COPY . .
RUN npm run build

FROM nginx:latest
COPY --from=builder /app/dist /usr/share/nginx/html
  • 配置目录卷
    如果不配会报如下错:
    $ docker build -t $imgname .
    ERROR: error during connect: Get "http://docker:2375/_ping": dial tcp: lookup docker on 183.60.83.19:53: no such host
    ERROR: Job failed: exit code 1
    在这里插入图片描述
# 登录远程操作
docker ps
# 找到gitlab-runner的安装环境
cd /srv/gitlab-runner/config/
ll

# 编辑config.toml文件
vim config.toml
i # 进入编辑状态,找到对应的runner
    [[runners]]
      [runners.docker]
        volumes = ["/cache","/usr/bin/docker:/usr/bin/docker", "/var/run/docker.sock:/var/run/docker.sock"]
esc # 退出编辑状态
:wq # 保存

3.2 OSS部署

oss文档:https://help.aliyun.com/product/31815.html?spm=5176.7933691.J_7985555940.1.6c6f2c47M65ENt

  • 开通OSS: 可以去云平台申请免费试用对象存储OSS

  • 创建Bucket: 权限管理的读写权限要设置为 公共读写 才行
    gitlab CI/CD自动化部署_第8张图片

  • 获取 endPoint, accessKeyID, accessKeySecret
    gitlab CI/CD自动化部署_第9张图片

gitlab CI/CD自动化部署_第10张图片

  • 将 endPoint, accessKeyID, accessKeySecret,作为变量绑定到gitlab上
    gitlab CI/CD自动化部署_第11张图片
    gitlab CI/CD自动化部署_第12张图片
  • 修改文件.gitlab-ci.yml
# 2.编译   
job_build:
  ...
  # 制品,此处dist是npm run build编译后生成的目录
  # 把这个dist目录存储起来做成一个制品,可以在后续每一个任务之间去相互传递
  artifacts:
    paths:
      - dist/
      
# 3.oss部署
job_deploy_oss:
  stage: deploy
  tags:
    - vue
  script:
    # 下载了一个oss的压缩包,下载到了项目根目录
    - wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64
    # 给ossutil64设置一个权限
    - chmod 755 ossutil64
    # 此处变量endPoint, accessKeyID, accessKeySecret可存于gitlab项目 => Settings => CI/CD => Variables处
    # endPoint是地域节点: oss-cn-beijing.aliyuncs.com
    # accessKeyID:key
    # accessKeySecret: 密钥
    - ./ossutil64 config -e ${endPoint} -i ${accessKeyID} -k ${accessKeySecret} -L CH --loglevel debug -c ~/.ossutilconfig
    # 使用cp命令把文件上传
    # testproject-bucket为bucket名
    # testProject 文件夹名称
    - ./ossutil64 -c ~/.ossutilconfig cp -r -f dist oss://testproject-bucket/testProject
  • 访问
    上传成功后可在对应的桶里看到上传的文件
    若需要浏览器直接访问,需使用自定义域名进行访问
    gitlab CI/CD自动化部署_第13张图片
    gitlab CI/CD自动化部署_第14张图片

你可能感兴趣的:(gitlab,ci/cd,自动化)