zoukankan      html  css  js  c++  java
  • Linux搭建.net core CI/CD环境

    一、简介

    微服务开发中自动化、持续化工程十分重要,在成熟的CI/CD环境中项目团队可以灵活分配,大大提供团队效率。如果还不了解什么是CI/CD,可以先查看相关文章,这里主要介绍环境的搭建,相关原理就不过多搬书了。

    二、开始搭建

    准备

    目前主流的ci/cd环境都是基于容器化管理的,所以想要搭建这一环境必须熟练docker操作。版本控制选择git,构建工具选择Jenkins,所以开始前需要先掌握这些技术。

    Step1:安装docker

    Ubuntu 18.04 docker安装

    docker安装方式有多种,存储库安装方式如下:

    更新存储库:

    sudo apt-get update

    卸载旧版本docker:

    sudo apt-get remove docker docker-engine docker.io

    安装docker:

    sudo apt install docker.io

    启动docker、开机自启:

    sudo systemctl start docker
    sudo systemctl enable docker

    检查版本:

    docker --version

    Step2:选择版本控制器

    代码托管最好选择git,git仓库公司应该都有搭建,如果没有也可以选择GitHub、gitLab、gogs等git工具。

    step3:Jenkins安装

    存储库方式安装Jenkins

    更新存储库、安装Java:

    sudo apt updatesudo 
    apt install openjdk-8-jdk

    导入Jenkins存储库的GPG密钥:

    wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

    将Jenkins存储库添加到系统中:

    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

    更新存储库、安装Jenkins:

    sudo apt updatesudo 
    apt install jenkins

    检查Jenkins状态:

    systemctl status jenkins

    安装成功则输出如下:

    ● jenkins.service - LSB: Start Jenkins at boot time
    Loaded: loaded (/etc/init.d/jenkins; generated)
    Active: active (exited) since Wed 2018-08-22 13:03:08 PDT; 2min 16s ago
        Docs: man:systemd-sysv-generator(8)
        Tasks: 0 (limit: 2319)
    CGroup: /system.slice/jenkins.service

    记得开放8080端口

    进入Jenkins:http://服务器IP:8080

     获取初始密码:

    sudo cat /var/lib/jenkins/secrets/initialAdminPassword

    登录成功:

     

     选择左边推荐插件安装:

     设置管理员密码:

     配置完成:

     以上步骤都成功的话就可以开始创建自动化工程了。

    Step4:创建Jenkins任务

    进入Jenkins主页,选择新建任务:

     输入任务名,选择自由风格:

     确定后进入任务配置,源码管理选择git,tfs也可以但是不建议

     触发器根据需要选择,我是通过手动发布所以并未选择触发器

     构建环境选择删除工作空间

     最后是关键一步,也是最容易出错的一步,执行命令:

    #!/bin/sh
    cd /var/lib/jenkins/workspace/auth-server/applications/AuthServer.Host/publish
    docker container prune << EOF
    y
    EOF
    docker container ls -a | grep "auth-server"
    if [ $? -eq 0 ];then
        docker container stop auth-server
        docker container rm auth-server
    fi
    docker image prune << EOF
    y
    EOF
    docker build -t auth-server .
    docker run -d -p 64999:80 --name=auth-server auth-server

     完成后应用并保存。

    shell命令分析:

    熟悉Linux命令的话应该可以大致看懂上面的shell命令,命令执行步骤如下:

    1. 进入工程的工作空间

    2. 判断是否存在“auth-server”容器,存在则删除容器及镜像

    3. 构建docker镜像

    4. 启动docker容器

    这里的构建步骤与标准CI/CD有差异,标准CI/CD是拉取代码后在服务器上构建(build)代码并打包docker镜像。上述过程是在本地构建并发布至publish目录中,然后提交publish文件,Jenkins拉取编译文件进行docker发布。

    为什么要本地构建:

    在本地构建代码并提交要比提交代码后服务器构建多出一步,这一步并不是多此一举,下面分析下本地构建的原因:

    1. 环境:由于国内网络原因,服务器构建代码时会出现很多拉取nuget、npm包超时现象,而Jenkins发布会有时间限制,发布超时会默认失败。如果调整Jenkins发布超时时间则没有意义,发布时间超过一小时还不如手动打包docker呢。

    2. 节省资源: 构建代码十分消耗系统资源,在服务较多时一次代码提交需要同时发布数个有关联的服务,这时服务器很可能会死机导致开发环境大量服务超时,十分影响前后端开发人员工作进度。

    3. 快速:在高频率的产品迭代中,微服务的发布也会十分频繁,采用本地构建Jenkins发布的方式会大大缩短发布时间,甚至一个服务的发布只需1分钟。

    4. 排错:标准的CI/CD发布模式中,开发人员提交的代码很有可能有异常,这时服务就会发布失败,如果其他服务依赖于此服务则会导致其他服务出现接口异常现象,耦合较大的话会直接崩溃。发现异常后,开发人员需要重新拉取代码查看异常,而异常往往是由其他开发人员提交代码不完整导致。等到代码异常解决,重新发布可能一个小时就过去了。。。通过本地构建再发布就会完美避开这些周折。

    Jenkins发布演示:

    选择一个微服务:

    选择立即构建:

     左下会输入发布日志,上面输出代表发布成功。

    三、总结

    如果以上安装配置都成功的话,那么恭喜你,微服务开发必备的CI/CD环境已经搭建完成,没有成功的话也没关系,多次尝试一定会成功的,我也是几天的折腾才搭好的(服务器都重装了好几次)。后续会介绍更多在abp vNext微服务中进行实际业务开发,同时也会介绍vue的相关开发技巧,感兴趣的话可以持续关注。

  • 相关阅读:
    存储过程
    Java抽象类与接口的区别
    Spring资源
    30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)
    单例模式(Singleton)的同步锁synchronized
    常用快捷键大全
    设计模式学习总结(一)——设计原则与UML统一建模语言
    git命令
    Test测试方法
    oracle表分区
  • 原文地址:https://www.cnblogs.com/william-xu/p/11497108.html
Copyright © 2011-2022 走看看