zoukankan      html  css  js  c++  java
  • .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就行(我没有测试过,你可以尝试一下)
  • 相关阅读:
    Python for Infomatics 第14章 数据库和SQL应用四(译)
    展望2017
    bing的简单英文字典工具
    自我安慰
    Python for Infomatics 第14章 数据库和SQL应用三(译)
    Python for Infomatics 第14章 数据库和SQL应用二(译)
    Python for Infomatics 第14章 数据库和SQL应用一(译)
    希望父亲早日恢复
    Python for Infomatics 第13章 网页服务四(译)
    Python for Infomatics 第13章 网页服务三(译)
  • 原文地址:https://www.cnblogs.com/FateHuli/p/11791245.html
Copyright © 2011-2022 走看看