.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就行(我没有测试过,你可以尝试一下)
原文地址:https://www.cnblogs.com/FateHuli/p/11791245.html