zoukankan      html  css  js  c++  java
  • .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker

    之前写过使用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 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中查看部署状态:

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

     

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

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

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

  • 相关阅读:
    sqlserver where in 在 mysql
    C# MVC 获得程序运行路径 .net core
    matplotlib之scatter自动绘制散点
    matplotlib之scatter绘制散点
    可视化数据matplotlib之安装与简单折线图
    selenium之批量执行测试用例
    selenium之使用unittest测试框架
    python之使用smtplib模块发送邮件
    python之time模块:获取当前时间
    一个IT人士的个人经历,给迷失方向的朋友
  • 原文地址:https://www.cnblogs.com/weiBlog/p/11257444.html
Copyright © 2011-2022 走看看