• <table id="caya2"></table>
  • docker .net core 自动部署

    docker .net core 自动部署

    青杉 1,096 2021-11-17

    下载代理

    代理服务器池的作用用于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
    


    人成免费电影
  • <table id="caya2"></table>