首页 > 其他分享 >使用Azure DevOps 进行 docker .net core 自动部署

使用Azure DevOps 进行 docker .net core 自动部署

时间:2022-08-26 11:24:31浏览次数:86  
标签:core sudo DevOps sh registry https Azure docker com

下载代理

代理服务器池的作用用于CI也可以用于CD

主要用于编译打包

部署的话使用部署池

当前下载到本地了

https://vstsagentpackage.azureedge.net/agent/2.188.4/vsts-agent-linux-x64-2.188.4.tar.gz

创建代理文件夹

mkdir myagent && cd myagent
sudo curl -OL https://vstsagentpackage.azureedge.net/agent/2.188.4/vsts-agent-linux-x64-2.188.4.tar.gz

解压

tar zxvf vsts-agent-linux-x64-2.188.4.tar.gz

配置代理 - 在目录 ~/myagent

./config.sh

这里可能会出现一些错误提示:Must not run with sudo

具体的解决方案请参考https://github.com/microsoft/azure-pipelines-agent/pull/1713/commits/15a5beea684fa35172d661f3253b93e210409fbb

注意:代理服务器是基于.NET CORE3.1编写,所以需要相应的运行环境,如果没有,请运行如下命令:

./bin/installdependencies.sh to install

当前的解决方案

修改 config.sh文件

if [ $user_id -eq 0 ]; then
    echo "Must not run with sudo"
    exit 1
fi

if [ $user_id -eq 0 ] && [ "${ALLOW_RUNASROOT:-default_value}" == "default_value" ]; then
    echo "Must not run with sudo"
    exit 1
fi

运行

./config.sh

或者

export ALLOW_RUNASROOT=1; ./config.sh --unattended

创建自己的访问令牌 (PAT) 进行身份验证

我当前的Azure DevOps网址为:https://机构.visualstudio.com/

在Azure DevOps中找到 User Setting ->Personal Access Tokens

User Setting在右上角头像旁边

Create a new personal access token

Scopes选择Full access

当前token请妥善保存 在配置代理的时候需要使用

配置代理

Enter (Y/N) Accept the Team Explorer Everywhere license agreement now? (press enter for N) > y

>> Connect:

Enter server URL > https://dev.azure.com/机构名称
Enter authentication type (press enter for PAT) > 
Enter personal access token > ****************************************************
Connecting to server ...

>> Register Agent:

Enter agent pool (press enter for default) > QSPool
Enter agent name (press enter for iz2ze5jl9wtbhfev2i9kqjz) > 
Scanning for tool capabilities.
Connecting to the server.
Enter replace? (Y/N) (press enter for N) > y
Successfully replaced the agent
Testing agent connection.
Enter work folder (press enter for _work) > 
2021-07-14 03:18:32Z: Settings Saved.

  • 输入【Y】接受Team Explorer Everywhere许可协议;

  • 输入服务器URL,即项目的Azure的地址;

    我的Azure网站为 https://机构.visualstudio.com/ 这里我输入https://dev.azure.com/机构名称才正确

  • 输入身份验证类型,这里直接回车,选择默认的PAT;

  • 输入个人访问令牌,即PAT;

  • 连接服务器成功后,输入创建好的代理池;

  • 默认代理名称,也可以进行修改;

  • 因为我之前已经创建过了,所以是否替换的选择选择了【Y】;

  • 输入工作文件夹,直接回车,选择默认的【_work】;

然后运行启动命令:

./run.sh

如果出现Must not run interactively with sudo也需要修改run.sh文件

if [ $user_id -eq 0 -a -z "$AGENT_ALLOW_RUNASROOT" ]; then
    echo "Must not run with sudo"
    exit 1
fi

改为

if [ $user_id -eq 0 ] && [ "${ALLOW_RUNASROOT:-default_value}" == "default_value" ]; then
    echo "Must not run with sudo"
    exit 1
fi

采用服务的形式运行代理服务器

上面我们的代理服务器虽然上线了,但是在linux中是主线程的形式,退出就关闭了..

我们需要修改为服务的形式来运行.

运行命令安装服务:

sudo ./svc.sh install

启动服务:

sudo ./svc.sh start

查看服务状态:

sudo ./svc.sh status

停止服务:

sudo ./svc.sh stop

更新环境变量(当你有其他插件安装或者更新时)

./env.sh
sudo ./svc.sh stop
sudo ./svc.sh start

查看代理是否成功部署

在Azure DevOps网站中又下角设置找到

Agent pools -> 代理名称->Agents

查看是否Online

创建CI持续集成管道

创建私有Docker Registry

首先需要到持续集成的服务器上 安装Docker Registry来获取我们的docker image

拉取registry镜像

docker pull registry:2.7.0

registry 2.7以上删除了包 apache2-utils

创建票据文件夹

mkdir -p ~/auth ~/auth/registry && cd ~/auth/registry

创建htpasswd

myuser :账号

mypassword:密码

docker run --entrypoint htpasswd registry:2.7.0 -Bbn myuser mypassword > htpasswd

创建文件夹

mkdir -p ~/data/registry

现在,我必须将我的凭据添加到注册表中。在这里,我将在容器中安装auth目录:

docker run  -d -p 8081:5000 --restart=unless-stopped --name registry-auth \
  -v  /root/auth/registry:/auth \
  -v /data/registry:/var/lib/registry \
  -e "REGISTRY_AUTH=htpasswd" \
  -e  "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e  REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry

然后通过nginx代理配置https

配置后的地址为https://xxx:8081/v2

创建Service connections(服务连接)

在Azure DevOps网站中又下角设置找到

Service conntections->New service connection->选中Docker Registry点击下一步-> 选择others

https://index.docker.io/v2/ 配置的镜像代理 需要配置成https

Docker ID :myuser 

Docker Password: mypassword

添写Service connection name点击保存

创建持续集成管道

找到Pipelines菜单->New pipeline

Connect :Azure Repos Git

Select:选择一个项目
//配置管道 选择 docker
Configure:docker

Yaml配置

# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- master

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'

stages:
- stage: Build
  displayName: Build image
  jobs:
  - job: Build
    displayName: Build
    pool: QSPool
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: 'QSDockerRegistry'
        repository: 'qs.api'
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'

安装git

  • 安装 WANDisco 仓库包

    yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

  • 安装 Git

    yum -y install git

  • 版本验证

    git version

安装aspnet:5.0失败

解决方案

docker pull mcr.microsoft.com/dotnet/aspnet:5.0

Error response from daemon: Head https://mcr.microsoft.com/v2/dotnet/aspnet/manifests/5.0: read tcp 172.17.85.195:49560->13.75.34.156:443: read: connection reset by peer

该问题出现的原因是因为我们无法访问mcr.microsoft.com的镜像 需要更换一个可以访问的镜像源地址

拉取国内服务器上的镜像

加速的本质是因为我将镜像推送到了国内的服务器,目前在以下服务器均存在镜像:

阿里云:registry.cn-hangzhou.aliyuncs.com/newbe36524
腾讯云:ccr.ccs.tencentyun.com/mcr_newbe36524

docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0

标签:core,sudo,DevOps,sh,registry,https,Azure,docker,com
From: https://www.cnblogs.com/huafoog/p/16626958.html

相关文章

  • HMS Core Discovery第17期回顾|音随我动,秒变音色造型师
    HMSCoreDiscovery第17期直播《音随我动,秒变音色造型师》,已于8月25日圆满结束,本期直播我们邀请了HMSCore音频编辑服务的产品经理、技术专家以及创新娱乐类应用“唱鸭”的......
  • 微信公众平台开发 - 接入公众号(.NetCore+WebApi)
    1.使用WebApi来配置公众号服务器地址,get用于签名,post用于接口,需要注意路由的定义  namespaceTzj.WeiXinSite.Controllers.Api{[Route("api/[controller]")]......
  • .Net Core之JWT认证方案
    .NetCore提供了JWT的认证方案,开箱即用,我们再配合Redis启用黑名单机制,基本可以满足需求基本功能 开启JWT认证:publicvoidConfigureServices(IServiceCollectionserv......
  • netcore项目的 dll 用在netframework项目的乌龙错误,异常类型:TargetInvocationExcepti
    数据保存插入时报错    1:多个win7 客服机 , 只有一台全部报错. 2:是局域网连本地数据库,还有个远程sqlserver数据库两者都存在问题.测试时本机都无数......
  • dlvm-netcore开源框架后台管理
    前言现在的程序开发人员大部分都不会自己去从零开发一个系统了,基本都是在使用一些免费的框架或破解一些有用的功能来自己二次开发组合使用,一般要达到要求是几个框架的功能......
  • 【原创】只用Asp.NET Core Web API与Vue 3.0搭建前后分离项目
    特地记录一下,网上的教程写的稀里糊涂的,整得我都心塞塞的,其实实现的过程蛮简单的问题是这样的:我将Vue构建生成好的文件,放在后端wwwroot文件里面,并开启静态文件访问功能,结果......
  • Rider调试ASP.NET Core时报thread not gc-safe的解决方法
    新建了一个ASP.NETCore5.0的WebAPI项目,当使用断点调试Host.CreateDefaultBuilder(args)时,进入该函数后查看中间变量的值,报错Evaluationisnotallowed:Thethreadis......
  • core
    core:centreofsuchfruitsastheappleandpear,containingtheseeds果心kernelsoftandusuallyediblepartinsideanutorfruitstone(坚果或核果的)仁......
  • ASP.NET Core Docker容器部署
    最简单的部署操作方式1.安装辅助工具1.1安装Gitsudoyum-yinstallgit安装完成后输入git命令查看1.2安装Nginx(这种部署方式暂时没用到)参考文档:https://......
  • NetCore异步编程CancellationToken
    十年河东,十年河西,莫欺少年穷学无止境,精益求精关于异步编程,很久之前就写过一遍博客:asp.netcore系列5项目实战之:NetCore的async和await(参考自:Microsoft教程)今天继......