之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下。

使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都可以哈,我这里使用的官方的,想自己搭建的同学可以参考下这篇,使用Docker搭建GitLab:

https://www.imooc.com/article/23168

有了GitLab之后我们还需要自己安装部署GitLab Runner,GitLabRunner是用来拉取GitLab仓库的代码,并根据你得.gitlab-ci.yml脚本来对代码进行编译部署,通常为了分散压力和风险GitLab和GitLabRunner不会在同一台服务器,我这里使用本地的虚拟机来进行安装GitLab Runner。

因为我是要部署在Docker里,所以在安装GitLab Runner之前我们最好先把Docker安装好,没安装的同学可以参考下面的脚本:

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker

新安装的话也把镜像加速器配置下,不然下载镜像特别慢。

安装GitLabRunner

1.添加repository

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash

2.安装包

https://blog.csdn.net/weiguang1017/article/details/77720778

3.注册runner

sudo gitlab-runner register

然后会提示我们输入GitLab仓库相应的信息,我们首先去GitLab中你要部署的项目,选择 Settings - CI/CD :

第一个要求输入URL,第二个要求输入Token。

有一步是让输入标签 “Please enter the gitlab-ci tags for this runner (comma separated):”,这一步可以什么都不输入,直接跳过。

接着会询问是否锁定当前项目“Whether to lock Runner to current project [true/false]:”,输入False。

最后一个选择Runner的执行方式,因为我这里并不是Docker部署的,所以输入 Shell。

完成之后刷新一下GitLab的刚才那个页面就会看到我们注册的Runner信息了:

然后编辑一下你对应的Runner,修改一处地方:

把上面标记的那个选项勾选上,表示无标签的任务也可以运行。

到这里还会有问题,因为Git Runner运行的时候默认会使用gitlab-runner用户去运行脚本,但是这个用户默认没有Docker的操作权限,所以如果直接测试会报错:“couldn't connect to Docker daemon at http+docker.......”,因此我们需要给这个用户开通下权限,在Git Runner服务器上执行如下脚本:

sudo groupadd docker

sudo gpasswd -a gitlab-runner docker

sudo service docker restart(或者systemctl start docker)

newgrp - docker

到这里Git Runner安装就算完成了,下面我们来测试。

自动部署测试

新建.net core Api项目 WebTest,项目里添加Dockerfile:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
Copy . . RUN dotnet restore
RUN dotnet build -c Release -o /app FROM build as publish
RUN dotnet publish -c Releease -o /app FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebTest.dll"]

然后在项目文件根目录下,注意是根目录哦,就是和解决方案同一级目录下添加.gitlab-ci.yml脚本文件,这个就是专门用来执行部署命令的,脚本规则参考官方:

https://docs.gitlab.com/ee/ci/yaml/README.html#only-and-except-simplified

stages:
- deploy_dev
deploy_dev_job:
stage: deploy_dev
environment:
name: development
only:
- master
script:
# 发布程序并部署运行
- cd WebTest
- docker stop webTest
- docker rm webTest
- docker rmi webtest
- docker build -t webtest .
- docker run -d --name webTest -p : webtest

因为是测试,我这里很简单,标准是三个流程,我这里只用到了部署流程,script哪里就是我要执行的脚本命令,可以看到这里就是每次执行先把上次的容器和镜像删除,然后重新build一个镜像,部署到8010端口。

写好这些之后,我们就可以提交代码了,提交之后去GitLab中查看部署状态:

可以看到你提交的代码到底有没有部署成功,我们可以点击状态按钮查看详细信息:

如果失败了,可以通过这里查看具体的原因。可以看到我最新的提交已经通过来,OK,我们现在可以通过浏览器访问了,服务器IP:8010:

可以看到正常访问,看下Docker容器信息:

OK,大功告成,本篇只是个小的Demo,下一篇会使用GitLab CI/CD实现商城项目 k8s的自动化编译、测试、发布流程。

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker的更多相关文章

  1. Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明

    Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...

  2. GitLab CI/CD 自动化部署入门

    前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正. 入门 初始化 cp: 无法获取'/root/node-v12.9.0-linux-x ...

  3. 使用 Gitlab CI/CD 实现自动化发布站点到 IIS

    说明 这里先介绍下两个东西 CI/CD.GitLab Runner,当然在此之前你需要对 git 有所了解,关于 git 这里不做说明,可以自行百度. 首先介绍 CI/CD :随着我们开发方式的转变, ...

  4. Gitlab+Jenkins实现自动部署

    Gitlab+Jenkins实现自动部署   系统环境: Gitlab主机 IP:192.168.1.2 Jenkins主机 IP:192.168.1.3 一.为何要做自动部署 #部署Tomcat的在 ...

  5. [原]CentOS7安装Rancher2.1并部署kubernetes (三)---解决登录kubernets超时和部署测试Pod和Containter[nginx为例]

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  6. .NetCore 配合 Gitlab CI&CD 实践 - 单体项目

    前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...

  7. 前端初探 Gitlab CI/CD

    前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...

  8. Gitlab CI/CD

    Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...

  9. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

随机推荐

  1. spring-cloud-kubernetes与k8s的configmap

    本文是<spring-cloud-kubernetes实战系列>的第六篇,主要内容是在kubernetes上部署一个java web应用,该应用使用了spring-cloud-kubern ...

  2. 前端架构师亲述:前端工程师成长之路的 N 问 及 回答

    问题回答者:黄轶,目前就职于 Zoom 公司担任前端架构师,曾就职于滴滴和百度. 1. 前端开发 问题 大佬,能分享下学习路径么,感觉天天忙着开发业务,但是能力好像没有太大提升,不知道该怎么充实自己 ...

  3. 微信小程序一步一步获取UnionID,实现自动登录

    思路: 1.小程序端获取用户ID,发送至后台 2.后台查询用户ID,如果找到了该用户,返回Token,没找到该用户,保存到数据库,并返回Token 小程序端如何获取用户ID: 小程序端 wx.getU ...

  4. Docker下使用disconf:极速体验

    Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...

  5. Elasticsearch在Java中的增删改查

    public class ElasticAPI { private static RestClient restClient; static { restClient=RestClient.build ...

  6. IOS集成JPush

    本篇文章采用Xcode手动集成JPush 证书 参考网址:https://docs.jiguang.cn//jpush/client/iOS/ios_cer_guide/ 下载SDK 下载网址:htt ...

  7. 基础知识:Mysql基本操作命令

    启动mysql :  mysql -hlocalhost -uroot -p 创建数据库:create database 数据库名字; 指定要操作的数据库:use 数据库名字; 查看数据表建表语句:s ...

  8. netcore mvc 的简单实现

    实现的功能 简单的路由系统 支持中间件 简单Filter支持 只支持HttpPost.HttpGet 使用Dotliquid做为视图渲染引擎 核心实现 HttpChannel 复制监听Tcp请求,并按 ...

  9. android小工具-系统音量管理器

    简介:调节系统音量的小工具,能够快捷的调节系统铃声,媒体音乐.闹钟和通话声音.你可能会想,手机自带的音量键还不够快捷吗?还得写个程序?首先,用音量键调音只能调节一种声音,像闹钟这种声音不能直接调.其次 ...

  10. hive 元数据解析

    在使用Hive进行开发时,我们往往需要获得一个已存在hive表的建表语句(DDL),然而hive本身并没有提供这样一个工具. 要想还原建表DDL就必须从元数据入手,我们知道,hive的元数据并不存放在 ...