.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker

摘要:
我以前写过使用Jenkins实现自动部署。最近,我刚刚对GitLab的自动化部署做了一些研究,顺便记录了一下。最后一个选项是选择Runner执行模式。由于Docker没有部署我,所以我进入Shell。可以看出,我的最新提交已经通过。好的,我们现在可以通过浏览器访问它。服务器IP:8010:我们可以看到正常访问。看看Docker容器信息:好的,这是一个小演示。下一个将使用GitLabCI/CD来实现商城项目k8s的自动编译、测试和发布过程。

之前写过使用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 :

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第1张

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第2张

第一个要求输入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。

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第3张

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

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第4张

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

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第5张

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第6张

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

到这里还会有问题,因为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 80

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 8010:80 webtest

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

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

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第7张

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

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第8张

 .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第9张

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

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第10张

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

.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker第11张

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

免责声明:文章转载自《.Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 2012 Express LocalDB 的作用近期遇到的一些信号处理的问题,做一下总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android抓包方法(转)

Android抓包方法(转) 作者:Findyou 地址:http://www.cnblogs.com/findyou/p/3491014.html 前言: 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等。 不管是之前做HTML5手机项目测试,还是现在的企邮app测试,经常需要抓包,做前端开...

ubuntu环境下部署SVN自动更新总结

目录 1、安装SVN。 2、创建svn根目录(SVN) 3、创建项目仓库 4、配置SVN 4.1、首先设置打开passwd文件设置用户名和密码。 4.2、打开authz文件设置用户所属分组和权限 4.3、打开svnserve.conf文件修改svn服务配置 5、启动svn服务 6、查看svn服务是否启动 7、连接svn 8、杀死svn进程 9、...

.net core2.2 利用Nginx反向代理在Ubuntu下部署

一、需要给ubuntu安装.netcore的环境 我这儿使用的是Ubuntu18.04,安装的是.net core 2.2 wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb sudo dpkg -i packages-micros...

微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)

0、主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问。步骤如下: 1、服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名。因此前期的服务器端工作需要先做好,本人是申请了个人域名(已备案),并使用阿里云服务器,然后申请免费SSL,通过配置tomcat完成支持https访问。此外,intellJ IDE的j...

国产系统安装docker-ce、配置mysql

银河麒麟安装docker 一、安装 添加用户组和用户,非root启动docker groupadd docker useradd -m -g docker docker -s /sbin/nologin 添加权限 sudo tee /etc/sudoers.d/docker >/dev/null <<EOF docker ALL=(AL...

Requests库入门实例

了解了Requests库的基本用法,附上一篇理论链接https://www.cnblogs.com/hao11/p/12593419.html 我们就可以做一些小实例了 1.亚马逊商品的爬取 首先用get方法对亚马逊网站发送请求,然后看返回的状态码,此处503不是200,表明没有成功, 然后要看text内容,首先检查编码格式,header中不存在,用备...