上一个Demo进行了单独的Jenkins远程部署, 本Demo将使用流行的Jenkins+Git+Docker进行持续部署.html
和上一篇Demo同样, 在Azure建立一台CentOS7服务器, 开放22端口供SSH使用, 而且开放了5000和5001端口.linux
基于微软官方文档, SSH到服务器使用以下命令安装:git
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm sudo yum install dotnet-sdk-3.0
这一步是比以前多出来的, 由于此次咱们要基于Docker进行持续部署, 根据官方文件:docker
# 卸载旧版本, 由于我是一台新的服务器, 这一步能够不作 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 安装须要用到的包 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # 设置docker安装仓库地址 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker社区版引擎 sudo yum install docker-ce docker-ce-cli containerd.io
有了上一篇Demo的基础, 这一次, 咱们轻车熟路, 去配置添加一个Server便可.json
https://gitee.com/jerryqi/JenkinsTest.git
和上次不同的一点是, 上次是在本地构建, 而后上传编译后的代码到服务器运行, 而此次是直接把源代码上传到服务器交给Docker来构建, 实际上这里绕了一个圈, 由于个人Jenkins在本地, 因此是本地下载了Gitee的代码而后上传到服务器, 实际上, 若是把Jenkins安装到服务器就能够在服务器直接拉取Gitee代码而后执行Docker脚本构建.centos
Key | Value |
---|---|
Name | 默认选择了你以前配置的Server |
Source files | ** |
Exec command | docker build -t jenkinstest . docker run -d -p 80:5000 --name jenkinstestapp jenkinstest |
由于在服务器上构建, 所以这里不写build选项卡, 固然也能够在本地构建, 那么相应的把Dockerfile改一改就行了.bash
在服务器上的docker构建能够参考个人另一篇文章: 使用Docker-Compose编排发布.Net Core+Redis应用两个镜像到Docker服务器
由于这里在服务器上实现Docker来构建项目, 咱们在项目根目录添加Dockerfile内容以下:并发
# 第一部分是编译并发布项目 # 以微软.Net Core SDK做为基础镜像, 而且以build做为别名 FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build # 切换build镜像工做目录到/app WORKDIR /app # 拷贝sln和csproj项目文件 COPY *.sln . COPY JenkinsTest/*.csproj ./JenkinsTest/ # Restore项目用到的包 RUN dotnet restore # 拷贝项目文件到镜像里面相应到目录 COPY JenkinsTest/. ./JenkinsTest/ # 切换build镜像工做目录到/app/AliPay WORKDIR /app/JenkinsTest # 以Release模式发布应用到out文件夹 RUN dotnet publish -c Release -o out # 第二部分是启动项目 # 以微软.Net Core运行环境做为基础镜像, 而且以runtime做为别名 FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime # 切换runtime镜像工做目录到/app WORKDIR /app # 把build镜像里面编译出来的文件拷贝到runtime镜像 COPY --from=build /app/JenkinsTest/out ./ # 暴漏端口 EXPOSE 5000 # 启动应用 ENTRYPOINT ["dotnet", "JenkinsTest.dll"]
这里跑第一遍的时候提示以下错误:app
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
经过以下命令查看Docker daemon状态:
sudo service docker status # ● docker.service - Docker Application Container Engine # Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) # Active: inactive (dead) # Docs: https://docs.docker.com
发现他的状态是inactive, 经过以下命令重启Docker:
sudo service docker restart
再次检查Docker daemon发现它变成了active. 可是再次构建是依然报上述错误.
这个时候我直接在服务器上运行docker images, 发现以下错误:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
这个很明显是没有权限的问题, 这里有两种解决方法:
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登录用户加入到docker用户组中 newgrp docker #更新用户组 docker imges #测试docker命令, OK
最后就是, 必定要勾选Abort the build if it's stuck, 而后把超时时间改长一点, 由于第一次要拉取镜像, 默认的三分钟是不够用的.
而后Build now, 由于我把docker的5000端口映射到了服务器的80端口, 因此直接访问服务器IP便可访问成功, 大功告成!大功告成!大功告成!