• Linxu中.Net使用Jenkins+Docker+Git实现自动化部署


    构建伟大,无所不能

    一、环境准备

      1、运行环境Linxu系统 CentOS7.5【腾讯云】

      2、安装Docker:https://www.cnblogs.com/whereGo/p/12427247.html

    二、Jenkins 是什么?

      Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

      Jenkins支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

    三、CI&CD是什么?

      CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

      CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。

    四、在Docker中下载并运行Jenkins

    docker run 
      -u root 
      --restart=always 
      --name jenkins 
      -d 
      -p 8080:8080 
      -p 50000:50000 
      -v jenkins-data:/var/jenkins_home 
      -v /var/run/docker.sock:/var/run/docker.sock 
      jenkinsci/blueocean

    (1)--restart=always:Docker重启时自动启动jenkinsci/blueocean。

    (2)-d:jenkinsci/blueocean 在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志。

    (3)-p 8080:8080:映射(例如“发布”)jenkinsci/blueocean 容器的端口8080到主机上的端口8080。 第一个数字代表主机上的端口,而最后一个代表容器的端口。
    因此,如果您为此选项指定 -p 49000:8080 ,您将通过端口49000访问主机上的Jenkins。

    (4)-p 50000:50000:将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。 如果您在其他机器上设置了一个或多个基于JNLP的Jenkins代理程序,而这些代理程序又与 jenkinsci/blueocean 容器交互(充当“主”Jenkins服务器,或者简称为“Jenkins主”), 则这是必需的。默认情况下,基于JNLP的Jenkins代理通过TCP端口50000与Jenkins主站进行通信。
    您可以通过“ 配置全局安全性” 页面更改Jenkins主服务器上的端口号。如果您要将您的Jenkins主机的JNLP代理端口的TCP端口 值更改为51000(例如),那么您需要重新运行Jenkins(通过此 docker run …​命令)并指定此“发布”选项 -p 52000:51000,其中最后一个值与Jenkins master上的这个更改值相匹配,
    第一个值是Jenkins主机的主机上的端口号, 通过它,基于JNLP的Jenkins代理与Jenkins主机进行通信 - 例如52000。

     

    五、初始化:

     1、查看启动日志

    docker logs charming_austin

     2、进入到Jenkins容器,进入上面的路径查看密码存储的文件

    docker exec -it jenkins bash
    cat /var/jenkins_home/secrets/initialAdminPassword

    复制密码,在页面中密码框中粘贴,并点击继续。

    3、设置Jenkins本地化(不需要本地化的可以跳过)

     

    六、准备.Net项目

    1、我这里使用的是基于.Net5.0的Abp VNext项目

    2、选择添加=>Docker支持..。现在会弹出Docker文件选项提示框,选择Linux点击确定按钮即可。如下图所示:

    3、然后项目列表中会出现一个Dockerfile文件。如下图:

    4、做完上述操作,把项目推送到Github上。

    七、持续部署

    1、登录Jenkins点击系统管理->插件管理->下载Github插件(现在新版本的Jenkins都自动安装了Github插件)。

    2、安装好插件后,返回首页。选择“新建任务”=》“构建一个自由风格的软件项目”,输入任务名称,然后点击确定。如下图所示:

    3、如步骤2点击确定按钮以后会跳转到配置页面,在该页面对任务进行配置。具体流程如下:

    a、General主要是设置该任务的一些基本信息。

     

    b、源码管理选择Git,在Repository URL中输入源代码地址,在Credentials中添加登录Git的用户凭证信息,点击高级按钮可以设置源代码分支。如下图所示:

     

    c、构建触发器是指在达到什么条件下触发自动化构建

    d、构建环境可以根据自己的需求进行设置,在这里我只设置了“Abort the build if it's stuck”如果生成被卡住,自动中止。

    e、在构建中点击“增加构建步骤”下拉框,选中“执行shell”。然后在输入框中输入执行命令。如下所示:

    #!/bin/bash
    image_version=`date +%Y%m%d%H%M`;    #设置image版本号
    echo $image_version;        #在控制台显示当前版本号
    
    # 停止之前的docker container
    CID=$(docker ps | grep "abpapplicationbase" | awk '{print $1}')     #查询Container Id
    echo $CID
    if [ "$CID" != "" ];then
      docker stop $CID     #停止容器
      docker rm $CID       #删除容器
    fi
    
    # 进入项目根目录
    cd /var/jenkins_home/workspace/AbpApplicationBase/aspnet-core
    # build镜像并且打上tag
    docker build -t abpapplicationbase:$image_version -f src/AbpApplicationBase.HttpApi.Host/Dockerfile .
    docker images;
    # 把刚刚build出来的镜像跑起来
    docker run -p 80:80 -p 443:443 --name abpapplicationbase -d abpapplicationbase:$image_version;
    # 删除构建镜像过程中生成的无名称临时镜像
    docker rmi $(docker images -f "dangling=true" -q)
    docker logs abpapplicationbase;

    f:构建后操作(在构建成功以后需要执行的下一步操作)。该操作暂时无需使用,就不做详细说明。

    g:点击应用,在点击保存按钮。

    4、返回首页,执行构建。

     

     5、在构建历史中可以查看构建是否成功。如下图所示:

     6、在浏览器中输入服务器ip(或指定的域名)和在“e”步骤中指定的端口就可以正常访问了。如下图所示(因为我通过nginx做了反向代理所以端口和“e”中不一致):

     

    
    
    
     
    
    
    
     
    
    
    


  • 相关阅读:
    AcWing 1175. 最大半连通子图  
    【Nginx】如何用静态网页替换掉Nginx的固有欢迎界面(使用用户root+ufo)
    【Redis】rediscli设定过期时限
    【转载】Oracle之DBMS_RANDOM包详解
    【Nginx】部署静态页面网站(全程使用用户root)
    【CentOs/Nginx】把Nginx1.20.2在linux上run起来(详版)
    【Springboot】极简Springboot程序
    【data masking】遮盖脱敏方式与替换脱敏方式的简单实现
    Nginx和Redis相对于ES的速度证明,要做一名优秀的编程员,必须掌握C
    【java/regexp】将字符串中从第四位到第七位替换成星号
  • 原文地址:https://www.cnblogs.com/whereGo/p/13590050.html
Copyright © 2020-2023  润新知