• .net core +gogs + jenkins +docker自动化发布、部署


    1.首先,安装docker,不多bb

    2.我们采用docker的方式安装jenkins,同时将宿主机的docker挂载到docker安装的jenkins里面,可能有点拗口。说白了就是

    就是要让jenkins里面能共享宿主机docker
    docker run --memory 1.5G  --name myjenkins -p 8080:8080 -p 50000:50000 -u root -d --env JAVA_OPTS="-Xms256m -Xmx512m  -XX:MaxNewSize=256m"  -v /var/run/docker.sock:/var/run/docker.sock  -v /usr/bin/docker:/usr/bin/docker  -v /var/jenkins:/var/jenkins_home -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 jenkins/jenkins

    3.安装成功了之后,在安装一些必要的插件

    直接在 系统管理-》插件管理-》可选插件 搜索(根据自己需求安装)
    Publish Over SSH  通过ssh远程其他服务器
    gogs 这个不用解释了,你用什么代码管理工具搜索什么

    4.配置Publish Over SSH
    进入系统管理-》系统设置 找到Publish Over SSH

    这里需要注意的是,如果jenkins和要构建和发布的是在同一个服务器上,可以不用配置(比如我这里没进行配置)。

    如果不在同一台服务器上,需要填写。并且他的本质是远程到另一台宿主机,而不是进入jenkins目录,所以后面配置项目路径的时候按需修改。

     5.安装gogs,网上一大堆,建议直接用docker安装,省时省力。

    6.创建项目,添加Dockerfile

    FROM microsoft/dotnet:2.2-sdk as build-env
    WORKDIR /app
    # 拷贝所有文件到环境中,并进行restore,build and release
    COPY . ./
    RUN dotnet restore
    RUN dotnet build web.csproj
    RUN dotnet publish web.csproj -c Release -o out
    
    FROM microsoft/dotnet:2.2-aspnetcore-runtime
    WORKDIR /app
    #把发布好的文件拷贝到镜像中
    COPY --from=build-env /app/out ./ 
    
    EXPOSE 80 
    ENTRYPOINT [ "dotnet", "web.dll" ] 

    7.配置gogs,可参考 https://www.cnblogs.com/stulzq/p/8629720.html

    8.在jenkins创建一个自由风格的任务,主要配置以下几个

    echo "获取当前容器是否存在-----------------------------------------------------------------"
    containerps=$(docker ps -f name=web1 -q)
    containerstop=$(docker ps -a -f name=web1 -q)
    for alpha in "$containerps";do
        if [ "$alpha" = "" ];then
        echo "检查是否存在停止的容器-------------------------------------------------"
            for alpha1 in "$containerstop";do
              if [ "$alpha1" = "" ];then
              echo "不存指定容器-----------------------------------"
              else
              echo "存在停止了的 然后直接删除-----------开始------------------"
              docker rm $alpha1
              echo "存在停止了的 然后直接删除-----------完成------------------"
            fi
           done
        else
        echo "存在-停止运行 然后删除----------------------开始-----------------"
        docker stop $alpha
        docker rm $alpha
         echo "存在-停止运行 然后删除---------------------完成------------------"
        fi
    done
    
    
    
    echo "获取当前镜像是否存在-----------------------------------------------------------------"
    dockerlist=$(docker images web1image:latest -q)
    for alpha2 in "$dockerlist";do
      if [ "$alpha2" = "" ];then
         echo "不存在指定镜像-------------------------------------------------" 
      else
           echo "存在当前指定的镜像 删除镜像--------------开始-----------------------------------"
          docker rmi $alpha2
         echo "存在当前指定的镜像 删除镜像--------------完成-----------------------------------"
      fi
    done
    echo "开始输入工作目录-----------------------------------------------------------------"
    echo $WORKSPACE
    echo "转到项目工程目录-----------------------------------------------------------------"
    cd $WORKSPACE/web
    echo "构建Docker镜像-------------------------------开始----------------------------------"
    docker build -t web1image .
    echo "构建Docker镜像-------------------------------完成----------------------------------"
    echo "运行Docker容器-------------------------------------开始----------------------------"
    docker run  --name=web1 -p 40002:80 -d web1image
    echo "运行Docker容器------------------------------------完成-----------------------------"

     9.测试

    成功。

    常见问题:

    1.出现gogs推送403错误
        去jenkins-系统设置-全局安全设置-关闭CSRF防护
    2.出现connect: no route to host错误
      打开jenkins的端口,或者运行gogs容器时使用--link <jenkins容器名称>:<jenkins自定义别名> 后期web钩子那里直接填写http://<jenkins自定义别名>/gogs-webhook/?job=test就行(我没有测试过,你可以尝试一下)
  • 相关阅读:
    [WPF VTK]三维图形开发基础(一)
    WP开发(一)
    [WPF VTK]三维图形开发基础(四)

    WIN8 下IE突然无法打开(管理员权限可打开)
    [WPF VTK]三维图形开发基础(三)
    堆排序、快排的坑
    双向链表之插入
    [WPF VTK]三维图形开发基础(二)
    [转载]Android界面设计学习日志(一)
  • 原文地址:https://www.cnblogs.com/FateHuli/p/11791245.html
Copyright © 2020-2023  润新知