gitlab CI/CD自动化部署

2023-11-02


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)
      在这里插入图片描述
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/bb5489401
      在这里插入图片描述
    • 2)某一个项目的令牌
      在这里插入图片描述
  • 注册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
在这里插入图片描述

警告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
在这里插入图片描述
原因: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 手动执行任务

在这里插入图片描述

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: 权限管理的读写权限要设置为 公共读写 才行
    在这里插入图片描述

  • 获取 endPoint, accessKeyID, accessKeySecret
    在这里插入图片描述

在这里插入图片描述

  • 将 endPoint, accessKeyID, accessKeySecret,作为变量绑定到gitlab上
    在这里插入图片描述
    在这里插入图片描述
  • 修改文件.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
  • 访问
    上传成功后可在对应的桶里看到上传的文件
    若需要浏览器直接访问,需使用自定义域名进行访问
    在这里插入图片描述
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gitlab CI/CD自动化部署 的相关文章

随机推荐

  • 基于蒙特卡洛的强化学习方法【附带代码实现】

    基于蒙特卡洛的强化学习方法 蒙特卡洛方法 Monte Carlo methods 也被称为统计模拟方法 是一种基于概率统计的数值计算方法 运用蒙特卡洛方法时 我们通常使用重复随机抽样 然后运用概率统计方法来从抽样结果中归纳出我们想求的目标的
  • Powerdesigner16.5连接DB2 反向工程

    需要jDBC接口 DB2数据库 jDBC需要jdk支持
  • u-boot编译错误:error: bad value (armv5) for -march= switch

    在makefile文件最上方加上 ARCH arm CROSS COMPILE arm none linux gnueabi
  • Nginx访问二级目录后/(反斜杠)无法访问问题的解决办法

    Nginx访问二级目录的时候不加 反斜杠 无法访问 现在给出解决办法 我用的是正则表达式自动加 反斜杠 if d request filename rewrite http host 1 2 permanent
  • PCB设计_Via过孔和PAD焊盘

    PCB的四周一般会设计增加机械孔用于固定PCB板 增加整体结构的稳定 但是机械孔的设计往往在新手的设计中会出现许多问题 而且DFM检查还不一定可以检查出来 那么针对机械孔 金属化和非金属化 两种的设计 下面将会讨论 1 金属化机械孔 这里不
  • Vue刷新浏览器后重定向到首页或者某一个页面

    记录一下项目需要的一些小优化 刷新浏览器时回到首页 一般来说vue项目刷新浏览器之后还会继续跳动刷新之前的页面 我们只需要要App vue中的created方法中添加相关判断即可 这里的 index可以换成具体需要跳转的页面 具体代码如下
  • [深度学习] Relu层作用

    为什么引入非线性激励函数 如果不用激励函数 在这种情况下你每一层输出都是上层输入的线性函数 很容易验证 无论你有多少层神经网络 输出的都是输入的线性组合 激活函数是用来加入非线性因素的 因为线性模型的表达能力不够 以下 同种颜色为同类数据
  • 如何删除 MySQL ⽤户

    1 登录MySQL数据库 登录MySQL数据库 可以使 以下命令 mysql u 户名 p 2 查看当前 户 使 以下命令查看当前所有 户 ysql user 3 删除 户 在MySQL数据库中 删除 户需要使 DROP USER命令 以下
  • Python快速搭建HTTP服务

    欢迎关注 无量测试之道 公众号 回复 领取资源 Python编程学习资源干货 Python Appium框架APP的UI自动化 Python Selenium框架Web的UI自动化 Python Unittest框架API自动化 资源和代码
  • Tomcat 启动时,/logs/catalina.out: No such file or directory

    如果报这个错请查看是不是Tomcat包下载错了 注意 要下载Core 中的tar gz 如果Tomcat包正确请继续往下看解决方案 解决方案 touch cannot touch opt apache tomcat 7 0 93 src l
  • android动态设置maxheight,android - 如何在TextInputLayout上设置maxHeight - 堆栈内存溢出...

    我不想限制行数 我想限制TextInputLayout最大高度 这样 如果它太长 它将变为垂直滚动 我很好的代码解决方案 当前maxHeight属性对TextInputLayout或EditText无效 这是我的布局 xmlns app h
  • GB28181 对接海康平台,解决音视频卡顿问题

    GB28181 对接海康平台 解决音视频卡顿问题 一 概述 二 问题分析 1 设备对比分析 2 抓包对比分析 3 验证分析结果 三 总结 四 讨论 一 概述 设备使用GB28181协议对接海康平台时 发现音频和视频存在卡顿现象 不是一直卡顿
  • 程序分层领域模型规约中各种实体类命名(DO、BO、DTO、VO)的意义

    仅做参考 DO Data Object 与数据库表结构一一对应 通过DAO层向上传输数据源对象 DTO Data Transfer Object 数据传输对象 Service或Manager向外传输的对象 BO Business Objec
  • 期货开户一心一意坚持到底

    只有真正了解了自己的性格 那么离寻觅到适合自己性格的交易法则也就不远了 只有专注 一心一意的做某件事情 才能做到无困无惑 如果三心二心 那么最终只会一事无成 大道至简 坦然面对自己人性的弱点 才能做到交易简单 生活快乐 其实一时的坚持非感觉
  • npm run build:prod报错:events.js:291 throw er; // Unhandled ‘error‘ event处理办法

    解决办法 1 CTRL R输入cmd 2 在命令行输入 netstat ano findstr 8080 3 找到占用的PID号 进行查找 tasklist findstr 16504 4 CTRL SHIFT DELETE打开任务管理器
  • Qt: error: C2001: 常量中有换行符

    这里简单记录在使用Qt Creator时遇到的一个问题 如下一行代码 没有任何问题 但编译运行时会报错 label gt setText label 我是一个窗口 当使用中文时 可能会习惯性的使用QObject tr 函数 label gt
  • 文件查重FindDupFile

    finddupfile是网上用的比较多的一款绿色查重软件 具体步骤请参考以下 1 下载软件 可从网上下载该软件 或者从以下地址进行下载 本软件从网上可自行下载 下载链接 https pan baidu com s 1KDJ9U4U 8HQa
  • 数学分析闭区间套定理_什么是区间套定理?

    什么是闭区间 数轴上任意两点和这两点间所有点组成的线段为一个闭区间 闭区间套定理 有无穷个闭区间 第二个闭区间被包含在第一个区间内部 第三个被包含在第二个内部 以此类推 后一个线段会被包含在前一个线段里面 这些区间的长度组成一个无穷数列 如
  • FineReportV10.0入门

    第三章 报表属性设计基础 第三课层次坐标 常用公式
  • 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 是一种持续开发软件的方