• docker环境下使用gitlab,gitlab-runner 为 NetCore 持续集成


    环境

    Centos7.6 安装应用docker,docker-compose (我的Centos是用Hyper-V跑的分了8G的内存,阿里云2G根本跑不起来gitlab)

    为了保证我的Centos环境干净所以我的gitlab与gitlab-runner都是采用docker服务运行,包括后续的runner的工作形式(executor)也是选的docker。

    准备工作:

    拉取镜像:这步骤耗时挺长的,耐心等待吧(如果这个镜像没有了,你可以去hub.docker.com搜一下对应的镜像)

    1
    2
    3
    4
    docker pull gitlab/gitlab-ce:latest
    docker pull gitlab/gitlab-runner:latest
    docker pull docker:stable
    docker pull mcr.microsoft.com/dotnet/core/sdk

    创建gitlab 与gitlabruner 服务

    新建文件:docker-compose.yml ,

    在Centos服务器上创建docker-compose.yml文件并运行

     docker-compose run -d 
    复制代码
    gitlab:
       image: 'gitlab/gitlab-ce:latest'
       restart: always
       hostname: '192.168.2.2'
       environment:
         GITLAB_OMNIBUS_CONFIG: |
           external_url 'http://hts92.wicp.vip:8989'#这里需要更换成你的固定ip或局域网IP地址(我个人做法是用的动态域名。做的端口映射,如果你是内网做demo无所谓)
       ports:
         - '8989:8989'
       volumes:
         - '/srv/gitlab/config:/etc/gitlab'
         - '/srv/gitlab/logs:/var/log/gitlab'
         - '/srv/gitlab/data:/var/opt/gitlab'
    
    gitlab-runner:
      image: 'gitlab/gitlab-runner:latest'
      container_name: 'gitlab-runner'
      restart: 'always'
      volumes:
          - '/srv/gitlab-runner/confg:/etc/gitlab-runner'
          - '/var/run/docker.sock:/var/run/docker.sock'
    
    复制代码

    到此 gitlab 与gitlab-runner 已经搭建好了。(第一次登陆时需要你设置root用户密码这里我就不截图了,因为我已经设置完了。)

    接下来进入gitlab 新建个项目。项目名随意,

    进入刚建好的项目

     在开发机新建webapi项目:

    dotnet new webapi -n user.api --no-https

    添加镜像检测脚本

    添加镜像检测删除脚本到项目根目录(后续ci构建脚本会用到,每次从新编译docker file 时 会帮你删除掉之前的实例跟镜像):保存为check-images.sh 放到项目根目录

    if [ $(docker ps -a --format {{.Names}} | grep user-api) ]
    then
        docker rm -f user-api
        docker rmi user-api
    fi
    

    创建 .gitlab-ci.yml文件 放到项目根目录

    复制代码
    stages:
      - build
      - deploy
    # 构建
    build-job:
      stage: build
      only:
        - master
      cache:
        untracked: true
      script:
        - dotnet restore
        - dotnet publish -o ./out -c Release
      artifacts:
        # 可以缓存在gitlab的流水线记录中,供直接下载
        expire_in: 30 days
        paths:
          - out/
      tags:
        - 01-user-api-builder
    # 发布正式
    deploy-job:
      stage: deploy
      only:
        - master
      dependencies:
        - build-job  # 这里一定要依赖build-job,不然dockerfile里面的out目录无法使用
      script:
        - ls out/
        - docker ps
        - sh ./check-images.sh
        - docker build -t user-api .
        # 这里可以添加将生成好的image上传到dockerhub或者docker本地仓库
        
        ### 如果生成的镜像需要统一上传到仓库管理,则后面的逻辑可以分离到另外一个runner去执行
        # 这里可以添加从dockerhub或本地仓库拉取指定镜像
        - docker run -d --name user-api -p 8080:80 user-api
      tags:
        - 01-user-api-deploy
    
    复制代码

    创建 Dockerfile文件  

    创建 Dockerfile文件 放到项目根目录 (这里值得注意的是mcr.microsoft.com/dotnet/core/sdk 镜像名,要跟我们准备环境时候的镜像名保持一致,要不然build 时还需要在拉取 浪费时间,当然你可可以换成runtime环境的。好处就是编译镜像小,用我这个编译镜像大

    FROM mcr.microsoft.com/dotnet/core/sdk
    WORKDIR /app
    COPY out/ /app
    ENTRYPOINT [ "dotnet", "/app/user.api.dll" ]

    以上内容一同传至 gitlab刚建好的项目

    gitlab项目目录结构如下

    注册runner,

    找到rnner信息

    注册第一个runner

    记得替换吊对应信息。(--url,--registration-toke)

    复制代码
    docker exec -it gitlab-runner gitlab-runner register -n 
       --url http://hts92.wicp.vip:8989/ 
       --registration-token QJiAZYz3KSJyhWfsHKhC 
       --executor docker 
       --tag-list "01-user-api-builder"  
       --description "01-user-api-builder" 
       --docker-image "mcr.microsoft.com/dotnet/core/sdk" 
    复制代码

    注册第二个runner

    (值得注意的是: --docker-volumes /var/run/docker.sock:/var/run/docker.sock,当时没有这句话 我的docker实例无法跟docker容器(docker run docker)本身通讯 。这个问题让我找了进一天的时间)

    
    
    复制代码
    docker exec -it gitlab-runner gitlab-runner register -n 
       --url http://hts92.wicp.vip:8989/ 
       --registration-token QJiAZYz3KSJyhWfsHKhC 
       --executor docker 
    --tag-list "01-user-api-deploy" --description "01-user-api-deploy" --docker-image "docker:stable" --docker-volumes /var/run/docker.sock:/var/run/docker.sock
    复制代码

     如下代表runner 已经开始工作了并且执行成功。

     

    查看镜像

    复制代码
    [root@localhost ~]# docker images
    REPOSITORY                          TAG                 IMAGE ID            CREATED              SIZE
    user-api                            latest              62eafc3e4bf6        About a minute ago   1.74GB
    mcr.microsoft.com/dotnet/core/sdk   20190726            3af77ac73731        2 days ago           1.74GB
    mcr.microsoft.com/dotnet/core/sdk   latest              3af77ac73731        2 days ago           1.74GB
    gitlab/gitlab-runner-helper         x86_64-d0b76032     f8d183475601        2 days ago           52.4MB
    docker                              stable              c4154a2b47a1        4 days ago           216MB
    mysql/mysql-server                  latest              12a8d88596c0        4 days ago           294MB
    gitlab/gitlab-runner                latest              4142c6fc05d4        2 weeks ago          410MB
    gitlab/gitlab-ce                    latest              15563c211d40        3 weeks ago          1.8GB
    microsoft/mssql-server-linux        latest              314918ddaedf        7 months ago         1.35GB
    registry                            2.3                 83139345d017        3 years ago          166MB
    [root@localhost ~]#
    复制代码

    查看容器

    2ced458eea91        user-api                       "dotnet /app/User.Ap…"   21 seconds ago      Up 20 seconds             0.0.0.0:8080->80/tcp                              user-api
    cfed5894c526        microsoft/mssql-server-linux   "/opt/mssql/bin/sqls…"   3 minutes ago       Up 3 minutes              0.0.0.0:1433->1433/tcp                            sqlserver
    d713e32ee388        gitlab/gitlab-ce:latest        "/assets/wrapper"        3 days ago          Up 39 minutes (healthy)   22/tcp, 80/tcp, 443/tcp, 0.0.0.0:8989->8989/tcp   gitlab_gitlab_1
    e0cf226629d3        registry:2.3                   "/bin/registry /etc/…"   3 days ago          Up 39 minutes             0.0.0.0:5000->5000/tcp                            gitlab_registry_1
    eab855f64938        gitlab/gitlab-runner:latest    "/usr/bin/dumb-init …"   3 days ago          Up 39 minutes                                                               gitlab-runner

     以上容器已经运行成功

    测试

    (我的Centos虚拟机地址192.168.2.2) 

     总结:

      看着几行代码搞定,但是由于第一次做也耗时将近两天,随后在做就简单多了。整理出以上内容给大家分享。 以下为参考文章。有问题留言。

    参考文章

    https://www.lizenghai.com/archives/5180.html#Runner

    https://docs.gitlab.com/ee/ci/docker/using_docker_build.html

    https://www.jianshu.com/p/43ffba076bc9

     
    分类: NetCore
    标签: ci netcore
     
  • 相关阅读:
    DOM和XMLHttpRequest对象的属性和方法
    【代码版】今天,你的密码泄露了吗?
    使用Smarty的相关注意事项及访问变量的几种方式
    HttpWatch工具简介及使用技巧
    Smarty中的请求变量和保留变量的使用范例
    Linux管道操作
    发布mvc3报错:403.14Forbidden Web 服务器被配置为不列出此目录的内容
    仿Linux中的cp操作
    Fedora的ifconfig命令
    @ Register和@ Reference的区别
  • 原文地址:https://www.cnblogs.com/webenh/p/11254420.html
Copyright © 2020-2023  润新知