测试环境为Deepin,Windows系统操作也非常类似
环境
- Visual Studio Code
- TEE_CLC
- Docker
操作步骤
一、创建代理
- 登录Azure,点击左下角的【Organization settins】;
2、在左侧中找到【Pipelines】下的【Agent pools】,并点击,打开代理池界面;
3、可以使用现有的代理池,也可以新建一个,这里,点击【Add poll】添加新的代理池;
4、在弹出的界面中选择要创建的代理池类型【Pool type】,这里,选择【Self-hosted】;
5、然后输入代理池的名称,然后点击【Create】按钮创建即可;
6、点击创建好的代理池【AgentPoolTest】;
7、点击【New agent】,创建代理;
8、选择对应的操作系统【Linux】,下载代理工具包,下载完成后,执行创建代理、配置代理(选择刚创建的代理池)、运行代理命令。
(1)创建代理文件夹,并解压代理包到该文件夹
(2)运行解压出来的./config.sh
:
- 输入【Y】接受Team Explorer Everywhere许可协议;
- 输入服务器URL,即Azure的地址;
- 输入身份验证类型,这里直接回车,选择默认的PAT;
- 输入个人访问令牌,即PAT;
- 连接服务器成功后,输入创建好的代理池;
- 默认代理名称,也可以进行修改;
- 因为我之前已经创建过了,所以是否替换的选择选择了【Y】;
- 输入工作文件夹,直接回车,选择默认的【_work】;
注意:
在配置代理,即运行./config.sh
命令时,会需要输入登录的账号密码,Windows直接输入Azure的登录账号和密码即可,Linux环境密码需使用PAT才能登录,否则会报错访问被拒绝。
二、创建PAT
1、登录Azure DevOps,点击右上角的【User settings】,然后点击【Personal access tokens】;
2、点击【New Token】,创建一个新的PAT;
3、输入Token的名称【Name】,选择有效期【Expiration】;
4、选择Token的权限范围【Scopes】,可以自定义【Custom defined】,也可以全部选择【Full access】;
5、点击【Create】按钮创建Token;
6、最后,别忘记了将创建好的Token保存好,后续会使用,忘记了只能重新创建了。
三、映射代码
1、下载TEE_CLC,并解压;Windows系统可以是使用tf.exe,这是Visual Studio自带的;
2、进入解压文件夹,运行./tf eula -accept
,接受此产品的最终用户许可协议,必须接受才能使用;
3、接受完成后,运行./tf
命令,终端若输出一下内容,即代表可以正常使用了;
4、创建工作空间。运行./tf workspace new <workspacename> -collection:<azure devops url>
,然后输入登录账号和PAT;
5、映射代码文件。运行./tf workfold -map -workspace:workspacename <server folder> <local folder>
;
6、打开Visual Studio Code,安装【Azure Repos】扩展;
7、打开设置;
8、搜索【tfvc】,找到【tfvc:location】,将TEE_CLC或者tf.exe的路径配置到这里;
9、点击【文件】--【打开文件夹】,打开步骤5中映射的;
10、按【F1】,输入【Team:Signin】并回车;
11、选择【Provide an access token manually (current experience)】,并回车;
12、然后输入PAT,回车即可登录成功。
四、提交代码
1、在目录下创建一个新的项目dotnet new
,然后可以调用dotnet run
命令运行项目,确保项目可以正常运行;
2、创建Dockerfile
文件,可根据自己的项目进行调整
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS base
WORKDIR /app
EXPOSE 5000
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /src
# RUN dotnet restore "ASPNetCoreDemo01/ASPNetCoreDemo01.csproj"
COPY . .
# WORKDIR "ASPNetCoreDemo01"
RUN dotnet build "NetCoreDemo.Web.csproj" -c Release -o /app/build
RUN dotnet publish "NetCoreDemo.Web.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT [ "dotnet", "NetCoreDemo.Web.dll" ]
3、创建.dockerignore
文件
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
4、使用docker build -t netcoredemo01:v1.0 .
命令创建镜像,确保镜像能够正确生成;
5、使用docker run -itd -p 5000:80 --name netcorecontainer netcoredemo01:v1.0
运行容器,确保容器能够正常运行
6、提交代码到Azure DevOps中。
五、创建CI
1、登录Azure DevOps,选择我们创建的项目,点击左侧的【Pipelines】,打开管道界面;
2、点击【New pipelin】按钮,创建新的管道;
3、选择【Team Foundation Version Control】,如果没有【Team Foundation Version Control】,可以点击最下面的【Use the classic editor】进行创建;
4、Source选择【TFVC】,然后点击【Continue】;
5、模板可以选择【Docker container】,也可以选择最上方的【Empty job】进行自定义,这里,选择【Docker container】,然后点击【Apply】按钮;
6、可以修改管道名称【Name】,然后将代理池修改为之前创建好的代理池【AgentPoolTest】;
7、选择【Agent job 1】下的【Build an image】,Task version选择【1.*】,Container registry type选择【Container Registry】,然后确定Dockerfile路径是否正确;
8、可以修改生成的Image名称,如果勾选【Include latest tag】,那么生成的Image tag则为【latest】;
9、选择【Push an Image】,Task version选择【1.*】,Container registry type选择【Container Registry】,
Command选择【run】
10、输入要运行的Image的名称,然后输入【Container name】和【Ports】;
11、然后点击【Save & queue】保存并进行排队;
12、运行之前在Linux系统中的代理文件夹中的./run.sh,连接到Azure,等待Job运行成功即可。
六、创建CD
本例子是将CI中的【Run an image】移到CD中,即CI的管道的Agent job中只有【Build an image】
1、点击【Pipelines】下的【Releases】,点击【New】下的【New release pipeline】创建一个新的release pipeline;
2、可以使用已有的模板,这里选择空模板来自定义
3、点击【Stage 1】下面的【1 job, 0 task】创建任务;
4、点击【Agent job】,将代理池修改为之前创建好的代理池【AgentPoolTest】,然后点击Agent job 旁边的加号,创建任务;
5、选择【Docker】,并点击【Add】按钮添加任务;
6、点击左侧刚添加的任务
- 修改Task version为【1.*】;
- 修改Container registry type为【Container Registry】;
- 修改Command为【run】;
- 修改Image name为【images_test】;
- 修改Container name为【container_test】;
- 修改Ports为【5000:80】;
7、确认无误后,点击【Save】保存;
8、回到Pipeline,点击【Add an artifact】;
9、添加项目:
- Source type选择【Build】;
- Source 选择CI创建的管道;
- 点击【Add】按钮添加项目;
10、点击如图所示的图标,添加触发器;
11、将触发器的开关打开;
12、点击【Save】按钮,进行保存;
13、点击【Create release】创建release pipeline。