了解最新公司动态及行业资讯
目录 源代码仓库 环境配置好的云服务器 安装mysql 选择合适的CI/CD平台 在本地代码仓库配置 使用自动打包搭建演示效果 体验为什么需要
从概念提出至今已近十年服务器运维技术,各种实用的解决方案相继在各个开发团队得到应用。通过版本控制工具(Git、SVN)+源码仓库(Gitee、)+CI/CD平台(、、CI...)解决方案,大大提升开发者的开发体验,降低开发运维成本,提升产品质量...
由于个人经验不足,无法继续细说优点和功能,推荐一篇博客
基本思路
如何练习
废话这么多,不如实践一下,看看好坏。围绕 , , CI 等 CI/CD 平台,可以很好的实现持续集成和持续部署。在码云源码仓库中,我们可以看到如下流行的程序
并集成在
那么我们真正需要用到哪些技术和工具来构建这样一个流水线平台呢?
我总结如下:
掌握流行版本控制工具(Git、SVN)的基本使用 依赖一个源代码仓库(、Gitee) 基本的linux运维技术(SSH远程、)一个CI/CD平台(、、CI...)
仅此而已,无需任何编程技能!
精通以上每一项技术都不是一件容易的事,但我们只需要选择其中的一项来掌握基本方法,就可以将它们串联起来。
我根据自己的技术栈设计了这样一个方案
为此我们需要一步步做一些准备工作
版本控制工具(Git)学习使用
学习使用,这里推荐廖雪峰的Git学习网站,阮一峰-Git命令列表,阮一峰-Git原理
配置环境
安装软件git官网
检查安装
git --version
配置本地用户信息
git config --global user.name "Name"
git config --global user.email "**.com"
git config --list
源代码库
这里就不细说了,太简单了,用搜索引擎查一下就可以了,如图服务器运维技术,我在上面建了一个这样的仓库(空仓库也可以,后面可以补上代码)
注意本教程依赖这样的平台,必须使用,所以网络问题需要自己解决
我们准备了一个基于Asp.NET Core 6的图书馆管理系统项目,目录结构如下图所示。然后如上图所示将源码推送到远程代码仓库。(推送说明就不详细说了,掌握了git的基本使用就明白了)
环境配置良好的云服务器
为此,我准备了一台4G运行内存,8M带宽的腾讯云服务器。操作系统是
SSH远程登录
可以使用云服务器控制台提供的远程工具,也可以使用远程控制工具如. 为了让后面的操作尽可能的顺利,你需要使用一些基本的linux指令,你可以看看这个linux快速入门视频。
有免费版,下载安装后,新建一个如下
然后按照提示输入账户名和密码
服务器上安装的技术准备
在这里随便找了一个狂生的视频-详细教程,随便看看,加深理解
为什么博客应该使用
我们知道一个项目需要一个运行环境才能运行。为了运行一个java项目,我们为服务器安装相应版本的Jdk或Jre。.Net 应用程序需要相应版本的.Net 或.Net Core SDK 才能运行。,比如我们日常使用的可执行程序qq等,都是需要运行环境的,但是已经提前安装了各种版本的.Net,这样我们安装完应用程序就可以直接使用了。再比如在服务器上安装相应的数据库(mysql、)。管理这些开发环境是一件很烦人的事情,但是当我们使用这样一个容器化的技术库时,代码就是环境,可以安装在任何服务器上。无需配置任何环境即可运行。
安装
菜鸟教程-安装
使用安装mysql
有了我们安装mysql就变得简单了
docker pull mysql
看看我们拉下来的图片
docker images
跑
docker run -d --name mysql3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=******* mysql
查看正在运行的服务
这样,我们就在服务器上创建了一个数据库。这样的数据库不仅可以在生产环境中使用,也可以用来学习。毕竟在笔记本上安装数据库会比较占用内存。
所以我可以配置数据库连接字符串在我的项目中使用这个数据库
无论项目在哪个主机上启动,都可以成功运行。毕竟数据库的IP和密码是固定的。
选择合适的 CI/CD 平台
上面说了,我用的是我最开始是从Asp.NET Core官网文档上了解到这个技术的。自从被微软收购后,一直是微软推荐的CI/CD技术。
官网文档
如果你想真正了解这项技术,最好阅读英文版的文档。看完《》、《》两栏目介绍,基本就可以上手了
推荐一篇博客,看完之后可以对它有一个简单的了解 阮一峰-入门
在本地代码仓库配置
在我的项目中实现如下
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["BMS.csproj", "./"]
RUN dotnet restore "BMS.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "BMS.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "BMS.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BMS.dll"]
尝试在本地使用包构建进行部署
我们可以使用这个文件按照我们想要的方式打包构建项目源码
这里我们简单演示一下,测试需要安装在本地电脑上。
切换到某个项目目录下使用
docker build .
这个没有标签的图像是我们刚刚构建的
docker run -d --name bmstest -p 8080:80 7ab686d20640
打开浏览器检查是否成功
有效!
但是,它不够方便。虽然我们每次修改代码都会运行几个命令,别人也可以用我们的镜像运行程序,但是执行的命令是固定的。修改代码后是否可以修改代码?事实证明,可以自动让它被打包、构建和部署,人类也可以在懒惰中进步。
使用自动打包构建
我们在项目目录下自己搭建
name: .NET
env:
IMAGE_NAME: test
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET

uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
- name: Restore dependencies
run: dotnet restore
- name: Test
run: dotnet test --no-build --verbosity normal
- name: Docker Login
uses: docker/login-action@v1.10.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and Push
uses: docker/build-push-action@v2
with:
tags: horaoen/app:latest
push: true
context: ./BMS
- name: deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.HOST_USERNAME }}
key: ${{ secrets.HOST_SSHKEY }}
script: |
docker stop bms-container
docker rm bms-container
docker rmi horaoen/app:latest
docker pull horaoen/app:latest

docker run -d --name bms-container -p 8080:80 horaoen/app
可以看到这里的yml文件引用了几个变量。这些都是关系到用户安全的东西,不能直接写在配置文件里,需要在仓库里设置
添加您需要的密钥
详细解释
关于上面.yml配置文件怎么写,需要先了解基本原理
然后掌握几个用途
其实这些用户的项目的基本格式是users/,都是别人写的脚本。通过复用别人写的脚本,我们可以方便的做很多事情。
/@v2
用于将远程仓库中的源代码拉取到自动化构建脚本运行的服务器上。这里我们提供ubutu(这个写在配置文件里)
/设置-@v1
这是搭建项目的基础环境
/登录-@v1.10.0
docke官方给的,用于登录,方便我们后面上传图片到自己的图片仓库
/build-push-@v2
搭建镜像,推送到自己的镜像仓库。这个参数很难理解。其实就是相对于远程代码仓库根路径的路径
官网文档中介绍默认文件路径在/下,所以这个配置很重要,不能错配。
/ssh-@
当我们成功将镜像推送到镜像仓库后,我们需要ssh连接到我们要部署项目的服务器,然后在上面运行一系列的部署项目。
其他参数一目了然,就是这个有点麻烦。它是我们要连接的服务器的 ssh 私钥。这个官方网站上给出了教程
官网文档
您可以按照教程进行操作。其实你已经看到了这一点,说明你有能力解决这个问题。详细步骤可以查看博客中如何配置ssh keys。需要注意的是,文案尽量有说明的抄,哪怕是单个字符错了
私钥还要复制上下分界线,一个巨大的坑!!!
示范效果
查看项目
我们发现有乱码,这里只是模拟实际项目中的bug,现在修改代码修复bug
其实就是改一下,然后重新提交代码
有效!!
经验
显然从结果来看,这样很方便,但是学习技术的过程却很痛苦。将学习过程置于比较条件下是不公平的。学习一次,终生受益,但如果不去改变,就永远是后患。