CICD之 gitlab和gtilab runner

article/2025/9/30 10:45:33

gitlab官网地址
官网文档地址 https://docs.gitlab.com/runner/install/docker.html

一。gitlab

1。gitlab安装

方式一:rpm包安装(centos)1,下载rpm包清华源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/linux命令wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el7/gitlab-ee-12.9.0-ee.0.el7.x86_64.rpm --no-check-certificate或者windows电脑访问软件直接下载rpm包然后上传linux2.运行rmp包rpm -ivh gitlab-ce-12.9.0-ce.0.e17.x86_64.rpm3.修改项目仓库存储地址vim /etc/gitlab/gitlab.rb,搜索git_data_dirs,修改项目存储路径gitlab-ctl reconfigure,使生效4。启动gitlab-ctl start    //启动gitlab-ctl status   //查看状态gitlab-ctl stop    //停止方式二:docker安装1.gitlab文件夹下创建三个文件夹作为映射文件夹(容器卷) :config   logs   data2,拉取镜像:docker pull gitlab/gitlab-ce3.运行镜像docker run -d --hostname 192.168.61.146     //有hostname,不然后面创建项目的克隆地址是随机的-p 443:443 -p 80:80 -p 222:22 --name gitlab-ce--restart always -v /home/piaoransheng/gitlab/config:/etc/gitlab-v /home/piaoransheng/gitlab/logs:/var/log/gitlab-v /home/piaoransheng/gitlab/data:/var/opt/gitlabgitlab/gitlab-ce4.修改项目仓库存储地址vim /etc/gitlab/gitlab.rb,搜索git_data_dirs,修改项目存储路径gitlab-ctl reconfigure,使生效5.启动docker start gitlab-ce    //启动docker stop  gitlab-ce    //停止下·docker rm    gitlab-ce     //删除6.测试访问:http://192.168.61.146/users/sign_in方式三:docker-compose安装
version: '3'
services: gitlab:image: 10.10.4.129:5000/gitlab/gitlab-ce:latestcontainer_name: gitlabhostname: 10.10.4.129   //如果有修改more端口80为2880,这边要加上端口2880restart: alwaysprivileged: true   #避免挂载目录提示没有权限volumes:- ./volumes/config:/etc/gitlab- ./volumes/logs:/var/log/gitlab- ./volumes/data:/var/opt/gitlabports: - 80:80- 443:443- 222:22测试:http://10.10.4.129/

2。gitlab登录与创建项目

[登录网址](http://192.168.61.146/)
初始账号:root
密码在:config/initial_root_password里创建组/项目/用户 menu-admin——
查看项目        menu——project-your project设置中文:右上下三角号——>preferences——>Localization——>Language设置root账号的密码:菜单——管理员——用户——点击管理员账号——编辑——更改密码root123456项目代码存储在每个runner的/builds/root/mygitlab-project-1文件夹里面,注意不是gitlab,也不是gitlab-runner,而是gitlab-runner里面的runner
所以在注册runner时可以做个映射,具体见下面runner 注册gitlab-runner register --docker-volumes /home/piaoransheng/gitlab-runner/projects:/builds/root //把runner运行的路径映射到本地,/builds/root是通过

二。gitlab runner

1.gitlab runner安装

1,简介: gitlab-runner是用来运行流水线,流水线是由一个一个的job(作业)拼接而成(项目根目录下的.gitlab-ci.yml)gitlab runner是一个开源项目,用于运行作业并将结果发送回Gitlabgitlab runner类似于Jenkins的agent,执行CI持续继承、构建的脚本任务2.gitlab runner类型与状态类型:shared 共享类型,运行整个平台项目的作业group  项目组类型,运行特定group下项目的作业specific 项目类型,运行指定项目的作业状态:locked 锁定状态paused 暂停状态3.gtilab runner安装	(两个必备映射:本机docker、gitlab-runner配置文件)docker run -d --name gitlab-runner --restart always    -v /var/run/docker.sock:/var/run/docker.sock   //要有这个,不然执行器类型为docker的runner无法运行 报错误 后台是否启动Docker Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running-v /home/piaoransheng/gitlab-runner/config:/etc/gitlab-runner  //配置文件的映射,用来修改runner拉取镜像策略,不然每次都要拉取作业所需镜像,比如maven,浪费时间并且docker images也会有多个maven的镜像gitlab/gitlab-runner:latest测试:docker ps 看到gitlab-runner服务已经启动或者docker-compose方式安装version: '3'services: gitlab-runner:image: 10.10.4.129:5000/gitlab/gitlab-runner:latestcontainer_name: gitlab-runnerhostname: 10.10.4.129restart: alwaysprivileged: true   #避免挂载目录提示没有权限volumes:- /var/run/docker.sock:/var/run/docker.sock- ./volumes/config:/etc/gitlab-runner

2.注册runner

1.runner注册1.获取注册token   	shared类型token:menu——admin——overview——runnersgroup类型token: men——groups——your groups——点击gruop——setting——CI/CD——runnersproject类型token: menu——Projects——your projects——点击项目——setting——CI/CD——runners2.注册, (注册后就会在容器里/etc/gitlab-runner/config或者本机映射)的config.toml出现记录a.交互方式注册执行器类型为shell的runnera.敲命令:gitlab-runner register,回车b.根据提示粘贴注册地址,回车 (见上面获取注册token)c.根据提示输入注册token,回车(见上面获取注册token)d.根据提示输入runner描述:build,回车e.根据提示输入runner包名:build,回车f.根据提示输入runner执行器:shell(shell/docker/kubernetes),回车g.测试 在menu——admin——overview——runners页面最下面出现刚才注册的那一条runnerb.docker方式注册执行器类型为shell的runner1.进入gitlab-runner容器里面: docker exec -it  c82ccb670c86 /bin/bash2.敲命令gitlab-runner register --non-interactive      //非交互模式--executor "shell"    //执行器类型,有shell docker k8s--url "http://192.168.61.146"  //从gitlab页面获取 见上面获取注册token--registration-token "UNywwHz-3eofcXjtyfvS"  //见上面获取注册token--description "deploy"--tag-list "build,deploy"  //runner 包名,后面脚本文件的tags要和这边对应,才会使用到这个runner--run-untagged="true"      //是否运行没有指定runner的作业--locked="false"           //是否所帝国--access-level="not_protected"'3.测试 在menu——admin——overview——runners页面最下面出现刚才注册的那一条runner或者/etc/gitlab-runner/config config.tomlc.docker方式注册执行器类型为docker的runner(四个必备映射:本机docker、项目路径、maven配置文件、maven仓库)gitlab-runner register --non-interactive      //非交互模式--executor "docker"    //执行器类型,有shell docker k8s--docker-image alpine:latest //docker运行默认镜像,执行器类型为docker的才需要--url "http://192.168.61.146"  //从gitlab页面获取 见上面获取注册token--registration-token "UNywwHz-3eofcXjtyfvS" //见上面获取注册token--description "deploy"--tag-list "build,deploy"  //runner 包名--run-untagged="true"      //是否运行没有指定runner的作业--locked="false"           //是否锁定--access-level="not_protected"--docker-volumes /var/run/docker.sock:/var/run/docker.sock  //也和本地docker映射--docker-volumes /home/project/docker/conventional-station:/builds/yongfu/conventional-station:Z  //项目路径 这个需要注册完然后跑一个作业 echo "当前目录:$(pwd)看项目具体在容器哪里,然后再进去gitlab-runner的config.toml文件进行修改--docker-volumes /home/piaoransheng/maven/apache-maven-3.8.1/conf/settings.xml:/usr/local/maven/config/setting.xml   //maven配置文件--docker-volumes /home/piaoransheng/maven/apache-maven-3.8.1/cangku:/home/piaoransheng/maven/apache-maven-3.8.1/cangku    //maven仓库注意:执行器为docker类型的runner注册完去gitlab-runner容器/etc/gitlab-runner/config.toml对应的映射是/home/piaoransheng/gitlab-runner/config/config.toml在[[runners.docker] image下面加上pull_policy = "if-not-present" //拉取策略,就不用每次执行都要拉取镜像,执行器类型为docker的才需要		测试:在menu——admin——overview——runners页面最下面出现刚才注册的那一条runner或者/etc/gitlab-runner/config config.toml2.gitlab-runner一些命令(需要进入gitlab-runner容器里面才能运行)卸载                     gitlab-runner uninstall启动                     gitlab-runner start重启                     gitlab-runner restart停止                     gitlab-runner stop状态                     gitlab-runner status注册执行器:                                      gitlab-runner register 已注册的执行器列表                                 gitlab-runner list检查执行器是否可以连接,但不验证gitlab是否正在使用它     gitlab-runner verify删除                                        gitlab-runner delete注销                                        gitlab-runner unregister	  使用令牌注销执行器          gitlab-runner unregister --url http://192.168.61.146 --token UNywwHz-3eofcXjtyfvS使用名称注销执行器          gitlab-runner unregister --name gitlab-runner-name注销所有执行器              gitlab-runner unregister --all-runners3.运行流水线任务(流水线任务定义在项目根目录下的.gitlab-ci.yml)1,项目创建gitlab-ci.yml文件  在gitlab页面,menu——project——your project——点击项目——set up ci/cd项目跟目录就出现了文件.gitlab-ci.yml2.编辑.gitlab-ci.yml定义流水线任务3。提交代码,流水线任务就执行了

3.流水线任务脚本编写

a 创建脚本文件

menu——project——your project——点击项目——点击set up for CI/CD——选择分支点击create new CI/CD pileline

在这里插入图片描述
在这里插入图片描述

b 验证脚本 .gitlab-ci.yml

校验:menu——projects——your projects——点击项目——CICD——有个CI LINT(在run pipeline的左边)把文件内容复制进去,然后validata

c 脚本语法 .gitlab-ci.yml

1.简览

stages             全部阶段
cache:             缓存,有全局缓存和作业缓存
environment         
inherit
services           执行器类型为docker的runner用到
images             执行器类型为docker的runner用到,有全局镜像和作业镜像默认images: 注册runner时声明:alpine:latest 全局images : 流水线yml文件声明每个作业作业images, 流水线yml文件声明作业有用作业的image,作业没有用全局的image,全局没有用默认的image						
job                 scripts               作业任务before_script:        作业有用作业的,作业没有用全局的,全局没有就不执行after_script:		   作业有用作业的,作业没有用全局的,全局没有就不执行tags                  指定哪个执行器allow_failure         是否允许失败(默认false),如果为true,前面的Job失败,不会影响流水线后面的job的继续运行retry                 作业失败时重试,直到达到retry指定的次数timeout               超时(作业的超时时间可以超过项目级别超时时间,但是不能超过runner特定的超时时间)parallelonly                  定义哪些分支被执行except                定义哪些分支不会被执行    rulesworkflowartifacts             生成制品depency               获取制品	when                  控制作业运行(on_success  on_failure  always  manual  delayed  never)前面阶段作业  成功        失败        总是     收到    延迟     从不				

2.语法具体示例

only:-dev(dev分支)    - branches(所有分支)
except:-devcache:      缓存,有全局缓存和作业缓存paths: - target/ *.jarartifacts:  #生成制品name: mygitlab-1.0-SHAPSHOT.jar  #制品名称when: on_success   #job运行成功时做制品库paths:             #源文件路径- target/xx.jardependencies:    #使用制品- build #job名称
  1. 三阶段试验成功示例
variables:IMAGE_NAME: "conventional-station"IMAGE_TAG: "v1.0.0-snapshot.1.0"CONTAINER_NAME: "conventional-station"DOCKER_FILE_PATH: "./Dockerfile"stages:          #定义这个流水线的所有阶段- Build- Image- Deploybuild:               #自定义的作业名称stage: Build       #处于流水线哪个阶段tags:              #用哪个注册过的runner,页面menu——admin——overview——runners 最下面显示所有runner- dev-executoronly:- devimage: maven:3-openjdk-11       #在哪个镜像环境里面运行script:- echo "当前目录:$(pwd)"   # builds/root/mygitlab-project-1(在这个maven容器,如果shell启动是在gitlab-runner容器)- ls- echo "编译打包"- mvn clean package -Dmaven.test.skip=true -s /usr/local/maven/config/setting.xml  #-s指定配置文件- ls- ls targetartifacts:name: $IMAGE_NAME-1.0-SHAPSHOT.jar  #制品名称when: on_success   #job运行成功时做制品库expire_in: 30 days #保留时间paths:             #源文件路径- target/*.jarcreatImage:stage: Imagetags:- dev-executorimage: bradj/docker:latestdependencies:    #使用制品- build #job名称script:- echo "当前目录:$(pwd)"   # docker镜像路径:builds/root/mygitlab-project-1- ls- echo "构建镜像"#停止并关闭容器- >if docker ps | grep ${CONTAINER_NAME} ;thenecho "进入停止容器"docker stop `docker ps -a | grep ${CONTAINER_NAME} | awk '{print $1}' `fi- >if docker ps -a | grep ${CONTAINER_NAME} ;thenecho "进入删除容器"docker rm   `docker ps -a | grep ${CONTAINER_NAME} | awk '{print $1}' `fi#删除镜像- >if docker images | grep ${IMAGE_NAME} | awk '{print $3}' ;thenecho "进入删除镜像"docker rmi $(docker images | grep ${IMAGE_NAME} | awk '{print $3}')fi#构建镜像- docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .deploy:stage: Deploytags:- dev-executorimage: bradj/docker:latestscript:- echo "容器名称:${CONTAINER_NAME},  镜像:${IMAGE_NAME}:${IMAGE_TAG}"- docker run -d  -p 9091:9091 --name ${CONTAINER_NAME} ${IMAGE_NAME}:${IMAGE_TAG}踩坑记录:1.提交代码部署报错提示环境内没有Dock:Docker Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running安装gitlab-runner的时候映射本机docker,这样gitlab-runner才能运行执行器类型为docker的runner2.runner每次执行脚本都重新再拉取所需镜像(gitlab-runner要再拉取镜像,比如maven,docker,配置gitlab-runner)去runner容器里面的/etc/gitlab-runner/config config.toml ,找到这个runner进行如下配置在[[runners.docker]下面加上pull_policy = "if-not-present" //拉取策略,就不用每次都拉取镜像3.runner每次执行脚本都去下载依赖包导(gitlab-runner里面的容器要再下载依赖,配置gitlab-runner里面的容器,比如maven)a.注册runner的时候映射maven配置文件、maven仓库(也可以注册完去gitlab-runner/config/congit.toml文件修改)b.runner作业脚本指定maven配置文件 mvn clean package -Dmaven.test.skip=true -s /usr/local/maven/config/setting.xml4.运行jar包提示找不到主类pom加入插件<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.test.MainApplication</mainClass></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build>5.Depoy阶段运行成功,容器日志显示项目启动,端口8081,但是无法访问运行镜像要做端口映射  docker run -d  -p 8081:8081 --name $CONTAINER_NAME $IMAGE_NAME:$IMAGE_TAG

http://chatgpt.dhexx.cn/article/UfUhfP7s.shtml

相关文章

gitlab-CI入门

gitlab-CI 代码管理自动化部署及消息推送 (1) 通过在项目根目录下配置**.gitlab-ci.yml**文件&#xff0c;可以控制ci流程的不同阶段&#xff0c;gitlab平台会扫描.gitlab-ci.yml文件&#xff0c;并据此处理ci流程。 (2) ci流程在每次团队成员push/merge后之后触发。每当你pu…

Gerrit介绍

谷歌 Android 开源项目在 Git 的使用上有两个重要的创新&#xff0c;一个是为多版本库协同而引入的 repo&#xff0c;这在之前我们已经详细讨论过。另外一个重要的创新就是 Gerrit —— 代码审核服务器。Gerrit 为 Git 引入的代码审核是强制性的&#xff0c;就是说除非特别的授…

Git--GUI

前言 上一篇文章简单的分享了Git 的 Bash Here的使用&#xff0c;以及一些Git常用的命令等。本篇文章要分享的内容为Git GUI Here 的使用。 一、GUI GIT官方网站为了解决部分用户通过命令行对git工具使用时的怨声载道的现象&#xff0c;因此推出了一个GIT的可视化工具Git Gui …

GitLab CI介绍——入门篇

本文将会对Gitlab CI进行简要介绍,包括Gitlab Runner,Gitlab CI中的相关概念以及.gitlab-ci.yml的常用配置。 那么,GitLab CI 是什么? GitLab CI 是GitLab内置的进行持续集成的工具,只需要在仓库根目录下创建.gitlab-ci.yml 文件,并配置GitLab Runner;每次提交的时候,…

Gerrit

开发、提交、push、入库流程&#xff1a; repo init -u ssh://gerrit帐号[ip:port/platform/manifest -b 分支名 repo sync -c -f --no-tags -j1 git commit git push origin HEAD:refs/for/分支名 有的可能是这样push的&#xff1a; git push ssh://usernameip:port/path…

CICD详解(八)——gitlab安装与配置

今天继续给大家介绍Linux运维相关知识&#xff0c;本文主要内容是gitlab的安装与配置。 一、安装环境准备 首先&#xff0c;我们先来安装一下Gitlab的依赖包&#xff0c;执行命令&#xff1a; yum install curl policycoreutils openssh-server openssh-clients postfix -y然…

CICD详解(九)——gitlab简单使用

今天继续给大家介绍Linux运维相关知识&#xff0c;本文主要内容是Gitlab简单使用。 一、Gitlab关闭自动注册 在企业生产环境中&#xff0c;我们一般由项目负责人负责创建用户并分配权限&#xff0c;一般禁止员工私自注册用户&#xff0c;以防给项目开发工作带来安全性上的风险…

GitLab -- 简单使用CICD功能

前提&#xff1a; 新建GitLab 项目&#xff0c;可参考我另一篇博客 GitLab -- 创建项目_DGH2430284817的博客-CSDN博客 安装配置好Runner&#xff0c;可参考我另一篇博客&#xff1a; GitLab -- 安装和配置Runner_DGH2430284817的博客-CSDN博客 创建.gitlab-ci.yml 文件&…

Git Gui

目录 1.什么是Git Gui 2. 什么是ssh key 3. git/github生成密钥并通过 第一步&#xff1a;本地电脑配置 1.配置用户名和邮箱&#xff08;如果已经配置&#xff0c;就跳过&#xff09; 2.检查下自己之前有没有已经生成ssh 3.生成(或删除)秘钥 第二步&#xff1a;远程git…

GitLab CI/CD artifacts 属性的配置与使用

😀最新最全的 GitLab CI/CD 全部关键词解析 请查阅该专栏 GitLab CI/CD 关键词 artifacts用于指定在job 成功或失败 时应附加到作业的文件和目录的列表。 作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载 如 artifacts:paths 路径是相对于项目目录($CI_PROJECT…

CI环境搭建-创建git

添加如下配置&#xff1a; 上图说的需每次启动的即下面这个文件&#xff1a; 默认用户名、密码是admin/admin 创建代码仓库&#xff1a; 选择版本库&#xff1a; 使用方法&#xff1a; 1&#xff0c;创建一个文件夹 选择版本库地址&#xff1a; 也可以通过cmd命令来拉取代码&am…

CI持续集成环境搭建(3)--git的安装与搭建

https://blog.51cto.com/superleedo/2057841 1. 安装git *Note:不要用yum安装git&#xff0c; yum源安装git最新版本是1.8.3&#xff0c;该版本太老&#xff0c;之后用git commit 有可能会报错&#xff1a;git: ‘interpret-trailers’ is not a git command. See ‘git --he…

JS 是怎样运行起来的

这里填写标题 1. Js 是怎样运行起来的?1.1. 前言1.2. V8 引擎1.3. CPU 是如何执行机器指令的?1.4. CPU 执行机器指令的流程1.5. V8 引擎的编译流水线1.6. 完整的分析一段 JavaScript 代码是怎样被执行的1.6.1. 初始化基础环境1.6.2. 解析源码生成 AST 和作用域1.6.3. 依据 AS…

bootstrap+javascript制作体重标准计算器

一、表单编辑 使用bootstrap可以快速创建表单样式。needs-validation 可以验证表单&#xff0c;如果验证不通过&#xff0c;表单不会提交&#xff1b; onSubmit"return false;"使得表单提交不会刷新页面&#xff1b; 下方js代码是用来控制表单验证&#xff1b; &l…

如何白嫖world.js、china.js以及各个省的js和json文件

全是干货&#xff0c;看仔细了。 作者在工作中遇到了绘制世界地图的场景&#xff0c;但是由于现在echarts的官网已经不提供地图文件下载了。 所以需要自己找资源&#xff0c;在csdn中用积分下载的资源还是挺多的。 但是碍于个别同学没有积分或者喜欢白嫖&#xff0c;所以这里…

js中?.、??的具体用法

1、?. &#xff08;可选链运算符&#xff09; 在javascript中如果一个值为null、undefined&#xff0c;直接访问下面的属性&#xff0c; 会报 Uncaught TypeError: Cannot read properties of undefined 异常错误。 而在真实的项目中是会出现这种情况&#xff0c;有这个值就…

JS之BigNumber.js 讲解

JavaScript因为存在计算的精度问题,所以直接计算就可能会导致各种各样的bug,为了解决这个问题,就要使用BigNumber.js这个库。 至于为什么JavaScript会有精度问题呢,可以看https://github.com/camsong/blog/issues/9。简单来说就是因为:JavaScript中所有的数字(包括整数和…

Js运动

JavaScript之Js运动 在我们进行web开发的过程中&#xff0c;为了与用户进行更加友好、有趣的交互&#xff0c;拥有一套完美的运动框架就能轻松解决。 这次就给大家带来Javascript学习中Js运动的编写和注意事项。实现运动的思想很简单&#xff0c;首先对这个元素获取定位&…

更优雅的编写JavaScript,使用这些函数秒变大神

如果你刚接触JavaScript可能你还没有听说过.map()&#xff0c;.reduce()&#xff0c;.filter()。或者听说过&#xff0c;看过别人用过但是自己在实际项目中没有用过。在国内很多开发项目都是需要考虑IE8的兼容&#xff0c;为了兼容很多JavaScript好用的方法和技巧都被埋没了。但…

JavaScript 计算标准体重的公式

判断标准体重 世卫计算方法&#xff1a; 男性&#xff1a;(身高cm&#xff0d;80)70&#xfe6a;标准体重 女性&#xff1a;(身高cm&#xff0d;70)60&#xfe6a;标准体重 标准体重正负10&#xfe6a;为正常体重 标准体重正负10&#xfe6a;~ 20&#xfe6a;为体重过重或…