使用gitlab自带的ci/cd实现.net core应用程序的部署
这两天在折腾持续集成和交付,公司考虑使用gitlab自带的ci/cd来处理,特此记下来整个流程步骤.
好记性不如一支烂笔头---尼古拉斯-古人言
第一步: 安装gitlab,这个自然不用多说
第二步: 使用docker容器安装gitlab-runner组件
新建一个docker-compose.yml文件,内容如下,在linux系统下使用 docker-compose up -d 命令跑起来就好(如果不会,可度娘搜索安装和使用)
1 version: "3.3"
2 services:
3 gitlab-runner:
4 image: gitlab/gitlab-runner:latest
5 container_name: gitlab-runner
6 #总是重启后启动
7 restart: always
8 privileged: true
9 volumes:
10 - ./config:/etc/gitlab-runner
11 - /var/run/docker.sock:/var/run/docker.sock
12 - /bin/docker:/bin/docker
13 networks:
14 - gitlab_runner_net
15
16 networks:
17 gitlab_runner_net:
18 driver: bridge
第三步: 安装完之后,需要将安装好的gitlab-runner注册到gitlab中去,这里我们就需要用到如下图中红色框框内的token令牌

1.进入容器内部
1 docker exec -it 96d4d3170eaf /bin/bash
2.开启注册
1 gitlab-runner register
3.输入上面的命令后根据提示输入指定信息
1 Enter the GitLab instance URL (for example, https://gitlab.com/):
2 http://192.168.1.250:9080/ #gitlab的地址
3 Enter the registration token:
4 XLccjJJ_mDkNRyzdyXsY #上面图片中的token,这样允许gitlab-runner免密连接gitlab
5 Enter a description for the runner:
6 [96d4d3170eaf]: signbox-service-message shell #这里输入备注信息,可留空
7 Enter tags for the runner (comma-separated):
8 deploy,master,dev #这里输入标签,最好是和git分支中tag的对应起来
9 Registering runner... succeeded runner=XLccjJJ_
10 Enter an executor: docker-ssh, shell, virtualbox, docker-ssh+machine, kubernetes, custom, docker, parallels, ssh, docker+machine:
11 shell #这里直接输入shell就好
12 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
完成注册后,在gitlab中就能看到注册的gitlab-runner信息了,如下图

第四步: 添加gitlab-runner账号授权
1.添加一个 gitlab-runner 用户(一般这个用户是不存在的)
1 sudo adduser gitlab-runner
2.将gitlab-runner用户添加到docker组内
1 sudo gpasswd -a gitlab-runner docker
3.查看docker组中是否已经成功(如果出现:docker:x:973:root,gitlab-runner则成功)
1 cat /etc/group |grep docker
4.重启docker容器服务
1 sudo systemctl restart docker
5.给docker.sock设置权限
1 sudo chmod a+rw /var/run/docker.sock
第五步: 在项目根目录下创建文件名为 .gitlab-ci.yml 的文件,此文件是用来构建打包部署的
1 stages:
2 - build
3 - deploy
4
5 build:
6 stage: build
7 script:
8 - cd ./
9 - docker build -f "./src/Test.Web/Dockerfile" --force-rm -t image-test --label "com.microsoft.created-by=visual-studio" --label "com.microsoft.visual-studio.project-name=Test.Web" "./"
10 only:
11 - master
12
13 deploy:
14 stage: deploy
15 script:
16 - cd ./
17 - docker stop image-test18 - docker rm image-test19 - docker run -d --name image-test -p 8080:80 image-test-app20 only:
21 - master
我这里把构建分为了两个阶段,一个是编译,另外一个是部署
1.build阶段负责把源代码编译成一个容器镜像.这里需要注意的地方就是 cd 只cd到根目录下,不要直接cd到Dockerfile文件所在目录,而是在编译命令中指定Dockerfile文件目录
2.根据编译好的容器镜像启动容器.这里需要注意的是需要大家多一步判断如果容器为新建则要排除停止和删除容器,否则会出现部署不通过的错误
第六步: 使用git提交代码就会自动触发构建(当每一步都是绿色时,则表示构建成功),如下图

温馨提示:从图1中进入图2中红色框框项勾选上,则可以即使提交代码时没有tag标签也可以支持构建
图1

图2

使用gitlab自带的ci/cd实现.net core应用程序的部署的更多相关文章
- Docker+Vagrant+Gitlab 构建自动化的 CI/CD
如果你的开发流程是下面这个样子的, 那么你一定很好奇, 为什么我提交到仓库的代码可以自动部署并访问到最新的提交内容 这就是近年来兴起的 DevOps 文化, 很方便的解决了开发人员和运维人员每次发布版 ...
- git 客户端连接gitlab 实现简单的CI/CD
1. git 客户端的安装 下载: https://git-scm.com/download/win 截至最近:20180728最新版本 2.18的下载地址 https://github-produc ...
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
- 前端初探 Gitlab CI/CD
前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...
- Gitlab CI/CD
Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...
- .NetCore 配合 Gitlab CI&CD 实践 - 开篇
引言 这是一个系列的文章,讲述的是一个中小型开发团队如何从零开始使用搭建基建 GitLab 代码托管平台,以及使用 GitLab Runner 实现 CI/CD 的故事.本系列通过部署一个完整的 .n ...
- 官网GitLab CI/CD英文文档翻译
在查阅GitLab官网的CI/CD功能说明时,全是英文看起来不方便,通过翻译软件自动翻译后"内容失真",看起来很变扭.查阅了百度上的资料发现很多翻译很老旧,有些甚至是挂羊头卖狗肉. ...
- [转]gitlab ci/cd 发布
转自 https://meigit.readthedocs.io/en/latest/configure_gitlab_i18n_and_create_gitlab_ci_with_gitlab_ru ...
- GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署
预期目标 源代码管理 借助GitLab实现源代码托管,私有化部署版本,创建项目,创建用户组,分配权限,项目的签入/牵出等. 自动化部署 源代码产生变更时(如签入),自动化编译并发布到指定服务器中部署, ...
随机推荐
- zabbix监控之自动发现/自动注册
一.自动发现 1.概述 自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法.例如,zabbix可以在你的机器上自动开始监控文件系统或者网络接口,而无需为每个文件系统或网 ...
- Linux服务之DNS服务篇
一.DNS服务概述 DNS(Domain Name System)域名系统,在TCP/IP 网络中有非常重要的地位,能够提供域名与IP地址的解析服务. DNS 是一个分布式数据库,命名系统采用层次的逻 ...
- IDEA Git 项目实战场景
实战场景一:上班啦,从远程仓库克隆项目到本地仓库(Clone) 打开 IDEA,在 Check out from Version Control 下拉菜单选择 Git,如下: 在弹出窗口的 URL 地 ...
- Java核心技术卷阅读随笔--第2章【Java 程序设计环境】
Java 程序设计环境 本章主要介绍如何安装 Java 开发工具包( JDK ) 以及如何编译和运行不同类型的程序: 控制台程序. 图形化应用程序以及 applet.运行 JDK 工具的方法是在终端窗 ...
- GO文件读写02---写文件
缓冲式写入文件 func main034() { //创建并写入 //file, err := os.OpenFile("测试文件", os.O_CREATE|os.O_WRONL ...
- 自动调度GPU的卷积层
自动调度GPU的卷积层 这是有关如何对GPU使用自动调度程序的文档. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,而无需任何调度命令或 ...
- Thumb扩展
Thumb扩展 ARM处理器已在嵌入式系统,手持计算机和其系统中得到了最大的应用,在这些系统中,系统对使用有限资源进行大量工作的要求很高.Thumb扩展是为解决资源消耗中的某些方面而创建的,已成为当今 ...
- 嵌入式Linux设备驱动程序:编写内核设备驱动程序
嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...
- C++标准模板库(STL)——vector常见用法详解
vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...
- video视频标签自定义显示隐藏播放控件&Shadow DOM
方法一:controlslist属性 controlslist="nodownload nofullscreen noremoteplayback" controlslist仅三种 ...