持续集成交付部署是什么意思,它给咱们带来什么好处?
先贴一张图
持续集成(Continuous Integration)
- 持续集成强调开发人员提交了新代码以后,马上进行构建、(单元)测试(这个要看状况了是否须要)
持续交付(Continuous Delivery)
- 持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。好比,咱们完成单元测试后,能够把代码部署到链接数据库的 Staging 环境中更多的测试。若是代码没有问题,能够继续手动部署到生产环境中。
持续部署(Continuous Deployment)
- 持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。
减小重复劳动 提升效率
jenkins你们都知道吧,但今天咱们用微软的vsts来定制个性化定制持续集成交付(我的或者小团队我建议用vsts 也不用本身安装jenkins环境了 直接用vsts在线系统很方便)
用到的资源有:
- 腾讯云服务器ubuntu一台(本身先安装好docker哈)
- vsts建立一个git(有微软帐号就能免费建立,<=5人团队是无偿使用的,对于敏捷团队绰绰有余啦) https://www.visualstudio.com/zh-hans/team-services/
一步步看图
第一步 在vsts建立一个工程
建立git用户
而后用git工具clone到本地 我习惯用Sourcetree 你们能够用本身习惯的方式
若是提示输入密码就输入上面建立的用户名和密码
第二步建立一个实验工程
这里咱们建立一个很是简单的console webapplication
安装nuget包
这里注意一点:我这里写死了 用 5001端口 注意我用的是 *:5001 没有用 localhost:5001 若是用这个方式的话 部署docker上会访问不了
确承认以跑起来
而后git提交代码到master分支
第三步咱们来配置vsts
先配置第一部分 一有代码提交到master分支 就自动编译 打包 【CI部分】
选择 ASP.NET Core 会默认有如下Task
必定要注意选择linux环境编译
Test咱们暂时不须要就Remove掉
因为咱们不是web project
配置触发器 (意思就是一有代码提交打master分支[能够指定特定分支]就会触发CI)
尝试跑一下
CI正常完成
到此CI配置工做已完成
接下来我想要完成自动 发布到个人腾讯云服务器 在服务器上把发布的文件打包并生成一个image 而后用这个image生成一个Container 并启动
第四部咱们配置Release
Sourece alias 这个你们能够修改为名字短一点
执行Release发布的时候会把以前CI public的东西download而后放在命名为 Source alisa文件夹内
我改为 _test_netcore-docker
接下来来配置环境
你们能够根据实际状况配置多个环境 好比 集成测试环境 和 prod环境
我这里就只配置一个prod环境
因为咱们是发布到腾讯云服务器 因此在这里选择 Empt process 且命名为prod
接下来要配置 Release 操做的 Task
咱们添加SSH 目的是用SSH 连接到 腾讯云服务器 而后 把发布的文件经过SSH传输到个人服务器
得先配置SSH无密码登陆
按照提示进行配置
配置好后
Source folder 输入咱们以前配置的别名 _test_netcore-docker
最终以下
而后再添加SSH执行命令工具
unzip -q site/drop/
TestDotnetcore.zip -d site/drop/ 发布的文件是zip的 经过这个命令解压zip <
TestDotnetcore.zip是我查看发布的日志找到的这个名字目前我尚未找到变量能够代替>
sudo rm -rf site/drop/*.zip 解压完成后删除掉
touch site/drop/Dockerfile 生成一个dockerfile
echo "FROM microsoft/aspnetcore:2.0" >> site/drop/Dockerfile echo命令是往建立的dockerfile里面写入内容
echo "COPY . /publish" >> site/drop/Dockerfile
echo "WORKDIR /publish" >> site/drop/Dockerfile
echo "EXPOSE 5001" >> site/drop/Dockerfile
echo "CMD [\"dotnet\", \"TestDotnetcore.dll\"]" >> site/drop/Dockerfile
sudo docker build --rm -t test_image -f site/drop/Dockerfile site/drop/ 建立一个image 名字叫 test_image
sudo docker ps -q --filter "name=test_netcore" | grep -q . && sudo docker rm -f test_netcore || true 查看是否有没有叫 test_netcore的容器有没有在runing 若是有就干掉它
sudo docker run --name test_netcore -d -p 5001:5001 test_image:latest 根据test_image启动一个名字叫test_netcore的容器
if sudo docker images -f "dangling=true" | grep ago --quiet; then sudo docker rmi -f $(sudo docker images -f "dangling=true" -q); fi 查看是否有<none>的image 把它删掉 由于咱们建立image的时候每次都会覆盖因此会产生一些没有的image
sudo docker images -f "dangling=true" | grep -q . && sudo docker rmi -f $(sudo docker images -f "dangling=true" -q)
sudo rm -rf site/drop 都ok了就删掉drop目录
以上一切准备好 提交一个commit到master试试
会自动触发CI 进行 编译 发布
接下来Release发布
发布打包的成果物在这里查看
发布成功 查看下docker image
已经成功建立了test_image这个镜像
容器是也跑成功了
验证一下
完美!!!无论你用的是腾讯云仍是阿里云仍是其余云都是能够的!
遗留问题:
TestDotnetcore.zip是我查看发布的日志找到的这个名字目前我尚未找到变量能够代替
有谁知道帮忙教育下!