使用GitLab自带的CI/CD功能在本地部署.Net8项目(二)

前置内容:

通过Docker Compose部署GitLab和GitLab Runner(一)

目录

一、创建代码仓库

二、创建GitLabRunner

三、注册Runner

四、配置Runner,绑定宿主Docker

五、创建.Net8WebApi项目进行测试

六、总结


一、创建代码仓库

在gitlab上创建group和project,例如我们要开发一个新的电商网站,那么group可以取名为:EShop,后端project取名为EShop.WebApi,如图所示为创建完的代码仓库:

二、创建GitLabRunner

基于上面创建的EShop.WebApi项目上设置CI/CD功能:

点击Expand按钮展开之后,点击New Project Runner按钮,进入创建页面,填写tags信息,其他信息可不填写,然后创建runner:

创建成功之后,会跳转到Register Runner详情页面,页面上显示了注册Runner时需要用到的url和token信息,不要关闭该页面

注意:在创建runner的时候忘了勾选"Run untagged jobs",可以继续编辑该runner,然后勾选上这个选项并保存

三、注册Runner

进入gitlab-runner容器内部:

docker exec -it gitlab-runner /bin/bash

在容器内部执行注册命令:

gitlab-runner register

按提示信息填写对应的内容,填写内容解释如下:

URL:上一步创建runner时gitlab给的url;

token:上一步创建runner时gitlab给的token;

name:runner的名称;

executor:构建项目应用方式,我们使用docker;

docker image:docker镜像(含版本信息),runner会利用这个镜像执行docker命令,这里我填写的是docker:23.0.2。

按回车会显示注册成功,如图所示:

这个时候我们会在挂载目录里看到生成的config.toml文件,查看文件内容

cat /opt/store/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
shutdown_timeout = 0




[session_server]
  session_timeout = 1800




[[runners]]
  name = "eshop.webapi-runner"
  url = "http://192.168.184.200:9080"
  id = 2
  token = "glrt-7pL3bomipxamUt8rCBhW"
  token_obtained_at = 2024-04-30T02:04:00Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:23.0.2"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    network_mtu = 0

四、配置Runner,绑定宿主Docker

由于我们配置的runner是通过docker执行器来构建我们的应用,而runner本身就是运行在docker中,而docker in docker这种运行方式非常缓慢,所以采用绑定宿主机的docker.sock方式来加快构建速度,这种方式下的所有docker命令都是向宿主机发出,有利有弊,config.toml文件更改如下,添加了runners.docker的挂载目录:

"/var/run/docker.sock:/var/run/docker.sock"

然后重启gitlab-runner容器

docker compose restart gitlab-runner

回到gitlab页面,可以看到EShop.WebApi项目的Runner已经创建成功

五、创建.Net8WebApi项目进行测试

将EShop.WebApi仓库克隆到本地,然后创建一个.Net8 WebApi测试项目,并在仓库代码根目录下添加.gitlab-ci.yml文件

.gitlab-ci.yml文件内容如下:

stages:
  - build
  - deploy


build:
  stage: build
  script:
    - docker build -f "./EShop.WebApi/Dockerfile" -t eshop.webapi:latest .
  only:
    - main  


deploy:
  stage: deploy
  script:
    - docker stop EShop.WebApi && docker rm EShop.WebApi || echo "Container EShop.WebApi not found, skipping removal."
    - docker run -d --name EShop.WebApi -p 9527:80 eshop.webapi:latest
  only:
    - main

我们定义了两个阶段任务build和deploy,在build阶段通过docker构建WebApi镜像,然后在deploy阶段,根据构建出来的WebApi镜像在当前GitLab机器上部署(和GitLab部署在同一台主机上,这种方式肯定不可取,下一篇将介绍远程部署)。

提交代码之后,我们可以在gitlab页面查看CICD过程:

部署成功之后,我们可以在浏览器上访问http://192.168.184.200:9527/WeatherForecast,可以看到接口成功返回内容:

六、总结

对于Runner的创建、注册以及配置都比较简单,多个项目可以共享同一个Runner,也可以创建一个全局的Runner供所有项目使用。.gitlab-ci.yml 文件是 GitLab CI/CD 的核心配置文件,用于定义项目的持续集成和持续交付流程。它使用 YAML 格式,包含了一系列的指令和参数,用于描述构建、测试、部署等任务的执行方式和条件。下一篇文章将介绍通过CI/CD将我们的应用服务部署在远程服务器上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/608563.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt---项目的创建及运行

一、创建第一个Qt程序 1. 点击创建项目后,选择项目路径以及给项目起名称 名称:不能有中文、不能有空格 路径:不能有中文路径 2. 默认创建有窗口类myWidget,基类有三种选择:QWidget、QMainWindow、QDialog 3. m…

【C++11】线程库 | 互斥量 | 原子性操作 | 条件变量

文章目录 一、线程库 - thread1. 线程对象的构造方式无参构造带可变参数包的构造移动构造 2. thread类的成员函数thread::detach()thread::get_id()thread::join()thread::joinable() 线程函数参数的问题 二、互斥量库 - mutex标准库提供的四种互斥锁1. std::mutex2. std::recu…

【Ubuntu18.04+melodic】抓取环境设置

UR5_gripper_camera_gazebo(无moveit) 视频讲解 B站-我要一米八了-抓取不止!Ubuntu 18.04下UR5机械臂搭建Gazebo环境|开源分享 运行步骤 1.创建工作空间 catkin_make2.激活环境变量 source devel/setup.bash3.1 rviz下查看模…

Oracle 修改数据库的字符集

Oracle 修改数据库的字符集 alter system enable restricted session; alter database "cata" character set ZHS16CGB231280; alter database "cata" national character set ZHS16CGB231280; alter system enable restricted session; alter database…

使用动态种子的DGA:DNS流量中的意外行为

Akamai研究人员最近在域名系统(DNS)流量数据中观察到:使用动态种子的域名生成算法(Domain Generation Algorithm,DGA)的实际行为,与对算法进行逆向工程推测的预期行为之间存在一些差异。也就是说…

C++ 基础 输入输出

一 C 的基本IO 系统中的预定义流对象cin和cout: 输入流:cin处理标准输入,即键盘输入; 输出流:cout处理标准输出,即屏幕输出; 流:从某种IO设备上读入或写出的字符系列 使用cin、cout这两个流对…

在Ubuntu上安装Anaconda之后,启动失败

为了方便管理Pythonu环境,在Ubuntu的Docker容器中安装了Anaconda,安装完成,启动时出现如下错误: conda activate xxx usage: conda [-h] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: acti…

Linux的基础IO:文件描述符 重定向本质

目录 前言 文件操作的系统调用接口 open函数 close函数 write函数 read函数 注意事项 文件描述符-fd 小补充 重定向 文件描述符的分配原则 系统调用接口-dup2 缓冲区 缓冲区的刷新策略 对于“2”的理解 小补充 前言 在Linux中一切皆文件,打开文件…

springcloud服务间调用 feign 的使用

引入依赖包 <!-- 服务调用feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>创建调用外部服务的接口 需要使用的地方注入 使用 启动类增…

CTFHUB-技能树-Web题-RCE(远程代码执行)-eval执行

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;eval执行解题方法&#xff1a;构造网址&#xff0c;查找当前目录文件并没有发现flag,接着查看上一级目录接着查看上一级接着查看上一级目录…

luceda ipkiss教程 66:金属线的钝角转弯

案例分享&#xff1a;金属线的135度转弯&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3 from ipkiss.geometry.shape_modifier import __ShapeModifierAutoOpenClosed__ from numpy import sqrtclass ShapeManhattanStub(__…

一种快速H.264 NALU快速搜索算法

1. 引言 在播放H.264码流的时候,进行NALU的搜索的效率高低影响着系统的性能。有采用普通逐字节搜索的算法,有利用cpu的simd的单指令多数据操作的并行功能进行搜索的算法,今天要介绍的是一个非常简单而且高效的快速搜索算法,而且不需要利用simd指令,搜索的速度甚至快于我之…

Spring-依赖来源

依赖来源 1 Spring BeanDefinition&#xff08;xml,注解&#xff0c;BeanDefinitionBuilder, 还有API实现的单例对象&#xff09; 2 Spring 内建BeanDefinition 3 内建单例对象 依赖注入和依赖查找的区别 Context.refresh() 的时候会调用这个方法&#xff1a;prepareBeanF…

如何通过wifi网络将串口数据发送到多个设备

摘要&#xff1a;当lora电台的速率无法满足高速传输时&#xff0c;可以考虑用“串口服务器”。本文介绍一下如何使用TP-LINK的TL-CPE300D实现一对多的数据发送。 当前也有使用lora电台的&#xff0c;但是lora电台支持的速率有限&#xff0c;可能最大支持到9600&#xff0c;甚至…

[虚拟机+单机]梦幻契约H5修复版_附GM工具

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了 视频演示 [虚拟机单…

【电路笔记】-Twin-T振荡器

Twin-T振荡器 文章目录 Twin-T振荡器1、概述2、Twin-T振荡器3、Twin-T放大4、Twin-T 振荡器示例5、总结Twin-T 振荡器是另一种 RC 振荡器电路,它使用两个并联的 RC 网络来产生单一频率的正弦输出波形。 1、概述 Twin-T 振荡器是另一种类型的 RC 振荡器,它产生正弦波输出,用…

PTP 对时协议 IEEE1588 网络对时 硬件基础

前言 在很多应用场景有精确对时的需求&#xff0c;例如车载网络&#xff0c;音视频流&#xff0c;工业网络。本文档将会阐述对时的硬件需求。 协议 流行的协议为 IEEE1588 标准指定的对时方法&#xff0c;名为 PTP 对时协议。 网卡硬件要求 找到某型网卡的特性描述&#x…

Antd Table组件,state改变,但是render并不会重新渲染

背景 在table上面&#xff0c;当鼠标放在cell上面的时候&#xff0c;需要去请求接口拉取数据&#xff0c;然后setList(res.result)后&#xff0c;希望render中的traceIds也能够实时更新渲染。 const [traceIds, setTraceIds] useState() // 需要展示在popover上面的数据&…

基于STM32F401RET6智能锁项目(环境搭建)

工程搭建 MDK&#xff0c;固件库&#xff0c;芯片包下载 下载keil5&#xff0c;stm32f4xx的固件库以及stm32f4的芯片包 keil官网&#xff1a;https://www2.keil.com/mdk5/ stm32中国官网&#xff1a;https://www.stmcu.com.cn/ 创建工程 1、新建一个工程文件夹&#xff0c;…

漫威争锋Marvel Rivals怎么搜索 锁区怎么搜 游戏搜不到怎么办

即将问世的《漫威争锋》&#xff08;Marvel Rivals&#xff09;作为一款万众期待的PvP射击游戏新星&#xff0c;荣耀携手漫威官方网站共同推出。定档5月11日清晨9时&#xff0c;封闭Alpha测试阶段将正式揭开序幕&#xff0c;持续时间长达十天之久。在此首轮测试窗口&#xff0c…