如何通过GitHub Actions推送Go制品至仓库?遇JFrog CLI命令错误求助
问题:GitHub Actions部署Go制品到JFrog Artifactory失败
问题现象
在GitHub Actions流水线中执行JFrog CLI部署Go制品时,报错No help topic for 'go-publish',退出码3。已尝试jfrog go publish、jfrog go-publish、jfrog gp等命令,错误一致。
现有流水线配置
name: Build and Push Docker Image and Go Artifacts on: push: branches: - jfrog-dev # Your specified branch workflow_dispatch: # Allows manual triggering of the workflow jobs: build: runs-on: ubuntu-latest steps: # Step 1: Check out the code from the repository - name: Checkout code uses: actions/checkout@v2 # Step 2: Verify JFROG_URL and USER - name: Verify credentials run: | echo "JFROG_URL is ${JFROG_URL}" echo "JFROG_USER is ${JFROG_USER}" # Step 3: Set up Go environment - name: Set up Go uses: actions/setup-go@v2 with: go-version: '1.23' # Step 4: Install dependencies and build Go binary - name: Install dependencies and build Go binary run: | go mod tidy go build -o mit-sphere ./cmd/main.go # Step 5: Install JFrog CLI - name: Install JFrog CLI run: | curl -fL https://getcli.jfrog.io | sh sudo mv jfrog /usr/local/bin/ echo "JFrog CLI version:" jfrog --version # Step 6: Log in to JFrog Artifactory for Docker - name: Log in to JFrog Artifactory for Docker run: | echo "${{ secrets.JFROG_PASSWORD }}" | docker login mani.jfrog.io -u "${{ secrets.JFROG_USER }}" --password-stdin # Step 7: Build and tag Docker image - name: Build and tag Docker image run: | docker build . -t mit-sphere:latest docker tag mit-sphere:latest mani.jfrog.io/mani1234-maniit/mit-sphere:latest # Step 8: Push Docker image to JFrog Artifactory - name: Push Docker image to JFrog Artifactory run: | docker push mani.jfrog.io/mani1234-maniit/mit-sphere:latest # Step 9: Configure JFrog CLI with username and password - name: Configure JFrog CLI run: | jfrog config add artifactory --url "https://mani.jfrog.io" --user "${{secrets.JFROG_USER }}" --password "${{ secrets.JFROG_PASSWORD }}" --interactive=false # Step 10: Deploy Go artifact to JFrog Artifactory - name: Deploy Go artifact to JFrog Artifactory run: | echo "Publishing Go package to JFrog Artifactory" jfrog gp mit-sphere-new-go 1 --server-id rt-server # 1 - stands for version number
错误日志
Run echo "Publishing Go package to JFrog Artifactory" echo "Publishing Go package to JFrog Artifactory" jfrog go-publish mit-sphere-new-go 1 --build-name my-go-build --build-number 1 --server-id rt-server shell: /usr/bin/bash -e {0} env: GOROOT: /opt/hostedtoolcache/go/1.23.2/x64 Publishing Go package to JFrog Artifactory No help topic for 'go-publish' Error: Process completed with exit code 3.
go.yaml配置
version: 1 type: go resolver: repo: mit-sphere-new-go serverId: manifest deployer: repo: mani1234-manii serverId: manifest
解决方案
1. 升级JFrog CLI并使用正确命令入口
当前安装的是旧版jfrog命令,新版JFrog CLI已改用jf作为命令入口,且go publish命令仅存在于新版中。修改安装步骤:
- name: Install JFrog CLI run: | curl -fL https://getcli.jfrog.io/v2 | sh sudo mv jf /usr/local/bin/ echo "JFrog CLI version:" jf --version
2. 修正CLI配置与命令参数
- 配置CLI时,确保server-id与go.yaml中的
serverId一致(当前go.yaml中是manifest,原命令中用了rt-server,不匹配):
- name: Configure JFrog CLI run: | jf config add manifest --url "https://mani.jfrog.io" --user "${{ secrets.JFROG_USER }}" --password "${{ secrets.JFROG_PASSWORD }}" --interactive=false
- 使用新版
jf go publish命令,结合go.yaml配置发布:
- name: Deploy Go artifact to JFrog Artifactory run: | echo "Publishing Go package to JFrog Artifactory" jf go publish --build-name my-go-build --build-number 1 --config go.yaml
3. 若发布二进制文件而非Go模块,改用上传命令
如果只是上传编译好的二进制文件,而非Go模块,直接用jf rt upload命令:
- name: Upload Go binary to Artifactory run: | jf rt upload mit-sphere mani1234-manii/mit-sphere/1/ --build-name my-go-build --build-number 1 --server-id manifest
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

