You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Go项目CI/CD问题:SSL错误与CD部署指导需求

问题解决与CD阶段实现指南

一、修复npm publish的UNABLE_TO_VERIFY_LEAF_SIGNATURE错误

方案1:临时禁用npm严格SSL验证(仅测试环境)

在npm publish执行前添加命令:

npm config set strict-ssl false

注意:生产环境禁用会带来安全风险,仅用于快速排查证书链问题。

方案2:使用Azure DevOps官方npm认证任务

放弃直接执行npm publish,改用npmAuthenticate任务自动处理认证与证书信任:

- task: npmAuthenticate@0
  inputs:
    workingFile: 'package.json'
    customEndpoint: '你的Azure Artifacts npm源服务连接'

- script: npm publish
  displayName: '发布到Azure Artifacts'

同时确保package.json中配置正确的Azure Artifacts源:

"publishConfig": {
  "registry": "https://pkgs.dev.azure.com/你的组织/_packaging/你的feed/npm/registry/"
}

方案3:导入Azure Artifacts根证书(企业代理环境)

如果构建机处于企业代理后,需将Azure Artifacts根证书导入系统信任存储:

sudo apt-get install ca-certificates
sudo wget -O /usr/local/share/ca-certificates/azure-artifacts.crt https://pkgs.dev.azure.com/你的组织/_packaging/你的feed/npm/registry/../_apis/ca-certificates
sudo update-ca-certificates

执行后重启构建代理或重新运行流水线。

二、Go项目CI阶段优化(上传二进制到Azure Artifacts)

以下是构建Linux二进制并发布到Azure Artifacts的CI阶段代码:

stages:
- stage: Build
  displayName: '构建Go二进制并上传到Azure Artifacts'
  jobs:
  - job: BuildJob
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - task: GoTool@0
      inputs:
        version: '1.22' # 替换为你的Go版本
      displayName: '安装Go环境'

    - script: |
        go mod tidy
        GOOS=linux GOARCH=amd64 go build -o my-go-app main.go
      displayName: '构建Linux二进制'

    - task: UniversalPackages@0
      inputs:
        command: 'publish'
        publishDirectory: '$(System.DefaultWorkingDirectory)'
        feedsToUsePublish: 'internal'
        vstsFeedPublish: '你的组织/你的feed' # 替换为你的Azure Artifacts feed
        vstsFeedPackagePublish: 'my-go-app' # 包名
        versionOption: 'patch'
        packagePublishDescription: 'Go项目Linux二进制包'
      displayName: '上传二进制到Azure Artifacts'

三、Linux VM 24.04的CD部署阶段

需先在Azure DevOps中配置Linux VM的SSH服务连接,再编写部署步骤:

- stage: Deploy
  displayName: '部署到Linux VM 24.04'
  dependsOn: Build
  jobs:
  - job: DeployJob
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - task: UniversalPackages@0
      inputs:
        command: 'download'
        downloadDirectory: '$(System.DefaultWorkingDirectory)/downloads'
        feedsToUse: 'internal'
        vstsFeed: '你的组织/你的feed'
        vstsFeedPackage: 'my-go-app'
        versionOption: 'latest'
      displayName: '从Azure Artifacts下载最新二进制'

    - task: SSH@0
      inputs:
        sshEndpoint: '你的Linux VM SSH服务连接' # 提前配置好的SSH连接
        runOptions: 'inline'
        inline: |
          # 创建应用目录
          sudo mkdir -p /opt/my-go-app
          # 复制二进制文件
          sudo cp $(System.DefaultWorkingDirectory)/downloads/my-go-app /opt/my-go-app/
          # 设置执行权限
          sudo chmod +x /opt/my-go-app/my-go-app
          # 创建systemd服务文件(后台运行用)
          sudo tee /etc/systemd/system/my-go-app.service > /dev/null <<EOF
          [Unit]
          Description=My Go Application
          After=network.target

          [Service]
          User=www-data
          ExecStart=/opt/my-go-app/my-go-app
          Restart=always

          [Install]
          WantedBy=multi-user.target
          EOF
          # 重载systemd并启动服务
          sudo systemctl daemon-reload
          sudo systemctl enable my-go-app
          sudo systemctl restart my-go-app
      displayName: '部署到Linux VM并配置服务'

部署注意事项

  • 确保Linux VM防火墙开放应用端口:sudo ufw allow 8080(替换为你的服务端口)
  • SSH服务连接需配置正确的VM IP、用户名和认证密钥/密码
  • 若应用依赖配置文件,需同步复制到VM对应目录

内容的提问来源于stack exchange,提问作者Hey Hello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:13:20