文章目录

  • 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:latestdocker ps

1.2 注册runner

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

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

    • 1)获取全局令牌
      登录管理员账号 => 管理员 => CI/CD->Runners->注册一个实例runner , 复制注册令牌(1iekpZaY9HxhHmaEDvLj)


    • 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版本后以后注册不用 register 命令了,要用 deploy 命令
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-cachepaths:- node_modules# 1.安装
job_install:# 任务内的阶段,必须从全局阶段stages中选stage: install# 标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-listtags:- vue# 定义该job执行的脚本script:- npm install# 2.编译
job_build:stage: buildtags:- vuescript:- npm run build# 失败后重试次数retry: 2# 只有指定的分支提交才会执行# only:#  - test# 3.部署
job_deploy:stage: deploytags:- vuescript:- 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: deployimage: docker  # script中有用到docker镜像tags:- vuescript:- 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 buildFROM 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: deploytags:- vuescript:# 下载了一个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自动化部署相关推荐

  1. GitLab CI/CD 自动化部署全流程

    CI/CD简介 CI/CD 是一种持续开发软件的方法,侧重于软件开发过程中的自动化,可以不断地进行构建.测试和部署代码.使用这种方法,从新代码开发到部署,可以减少人工干预甚至不用干预 CI(Conti ...

  2. 【GitLab】GitLab CI/CD 模型部署自动化超详细介绍

    文章目录 一.GitLab 二.GitLab-CI/CD 2.1 gitlab-ci.yml 2.1.1 基础概念 2.1.2 创建 yml 文件 2.1.3 yml 文件中的关键字 2.2 GitL ...

  3. GitLab CI/CD 自动化构建与发布实践

    流程介绍 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.这篇文章中,我将会介绍基于 GitLab CI/CD 的自动化 ...

  4. docker安装gitlab_Gitlab 中 CI/CD 自动化部署与使用

    今天给大家介绍一下Gitlab中CI/CD的自动化部署安装与使用. 1. docker方式安装 安装文档:https://docs.gitlab.com/runne... docker run -di ...

  5. 使用极狐GitLab CI/CD部署应用到Kubernetes集群的方案

    最近业余时间调研了一下在极狐GitLab CI/CD中部署应用到Kubernetes的方案.这是一个老生常谈的话题,很多粉丝和读者问我如何部署应用到K8s中.其实思路是很清晰的,只是其中又很多点大家可 ...

  6. Docker + GitLab CI/CD 实现自动化部署

    使用Docker+gitlab ci/cd 实现自动化部署 文章目录 使用Docker+gitlab ci/cd 实现自动化部署 1. Docker 1.1 Docker是什么? 1.2 Docker ...

  7. winform 项目 发布后比本地运行慢_前端团队基于 GitLab CI/CD 的自动化构建、发布实践,快来学习吧...

    在公司搭建内部 GitLab 平台后,前端活动项目从 SVN 迁移到 GitLab.本文介绍如何基于 GitLab CI/CD 实现自动化构建及发布. 在从 SVN 迁移到 GitLab 和接入 Gi ...

  8. Gitlab CI/CD教程以及实战docker自动部署前端项目(全)

    目录 前言 1. 技术知识 1.1 docker安装gitlab 1.2 docker安装gitlab-runner 1.3 .gitlab-ci.yml编写 1.4 使用docker部署前端项目 1 ...

  9. Springboot 项目通过 gitlab CI/CD 集成 k8s 自动部署

    本章节主要讲的是 springboot 项目发到 gitlab 仓库,触发 gitlab ci/cd 实现项目自动集成和部署,其中部署是以 k8s 方式部署 关于 gitlab-runner 安装和注 ...

最新文章

  1. 如何查看笔记本电脑配置参数_教你如何查看 MacBook 配置,超简单
  2. Android之ExpandableListView的各种效果(默认展开不合闭,自定义父栏目及箭头控制)
  3. 一个好用的查看Angular应用ngrx状态的Chrome扩展:Redux devTools
  4. 直接写和放在函数中不同的R语言用法
  5. python中MySQLdb模块用法实例
  6. Java文件如何用qq邮箱发送_java中怎么发送复杂的邮件?在QQ邮箱中怎么操作?
  7. leetcode python3 简单题35. Search Insert Position
  8. Labview连接mysql进行仿真
  9. linux中recv函数,为什么recv()函数收到空消息?
  10. android imageview 获取bitmap缩放大小,android – Imageview缩放方法“centercrop”作为代码...
  11. 操作系统课程设计-模拟操作系统
  12. 通过几道CTF题学习yii2框架
  13. 基于JAVA鞋店销售管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  14. Android---ADB工具连接真实手机(有线连接与无线连接)
  15. php 1为false,false是1还是0
  16. Go语言自学系列 | go语言数字类型
  17. 2017 TOMM-A Discriminatively Learned CNN Embedding for Person Re-identification
  18. 商务本Surface Laptop2用固态U盘安装Ubuntu18.04全教程(补充篇)
  19. 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(2)
  20. STM32课程设计--数字时钟+数字电压表+扩展功能--从零开始

热门文章

  1. java线程看不进去_Java多线程和并发基础面试问答,看过后你不会后悔
  2. 二手市场java源码_java|web|jsp校园二手网站|二手商品交易市场|平台|毕业设计课设|源码...
  3. 一个能生成精美代码图片的工具Carbon
  4. pycrypto下载
  5. php 情人节语句,感人的音乐情人节语录
  6. 自律力:创建持久的行为习惯,成为你想成为的人
  7. 基于tiny4412的Linux内核移植(支持device tree)(二)
  8. 4. 模型测试 - 测试过程、模型测试方法概述
  9. An End-to-End Neural Network for Image Cropping by Learning Composition from Aesthetic Photos
  10. NFS(NFS介绍,NFS服务端和客户端配置)