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
相关产品推荐
相关产品推荐

