如何在GitHub Actions中用JFrog CLI自动部署Maven快照与发布版本
用JFrog CLI在GitHub Actions中自动区分快照/发布仓库部署Maven包
核心思路
通过提取项目版本号判断是否为SNAPSHOT,动态指定Artifactory仓库,全程用GitHub Secrets隐藏敏感配置,同时借助JFrog CLI自动捕获构建信息。
具体配置步骤
在GitHub仓库配置Secrets
把以下敏感信息存入GitHub仓库的Settings > Secrets and variables > Actions中:ARTIFACTORY_URL: Artifactory实例的基础URL(比如https://your-artifactory.jfrog.io/artifactory)ARTIFACTORY_USER: Artifactory认证用户名ARTIFACTORY_API_KEY: Artifactory用户的API KeyARTIFACTORY_SNAPSHOT_REPO: 快照仓库的key(比如libs-snapshot-local)ARTIFACTORY_RELEASE_REPO: 正式发布仓库的key(比如libs-release-local)
编写GitHub Actions Workflow文件
在项目.github/workflows目录下创建部署流程文件(比如deploy-to-artifactory.yml),内容如下:name: Deploy to Artifactory on: push: branches: [ main, develop ] # 根据你的分支策略调整 release: types: [ published ] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v4 with: java-version: '17' # 替换为你的项目JDK版本 distribution: 'temurin' - name: Install and configure JFrog CLI uses: jfrog/setup-jfrog-cli@v2 with: url: ${{ secrets.ARTIFACTORY_URL }} user: ${{ secrets.ARTIFACTORY_USER }} password: ${{ secrets.ARTIFACTORY_API_KEY }} - name: Extract project version run: echo "PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV - name: Determine target repository run: | if [[ "$PROJECT_VERSION" == *"SNAPSHOT"* ]]; then echo "REPO_KEY=${{ secrets.ARTIFACTORY_SNAPSHOT_REPO }}" >> $GITHUB_ENV else echo "REPO_KEY=${{ secrets.ARTIFACTORY_RELEASE_REPO }}" >> $GITHUB_ENV fi - name: Deploy with JFrog CLI run: | jf mvn deploy -DskipTests \ -DaltDeploymentRepository=artifactory::default::${{ secrets.ARTIFACTORY_URL }}/${REPO_KEY} # 发布构建信息到Artifactory(可选,用于追踪构建详情) jf build-publish
关键细节说明
- 自动版本判断:通过
mvn help:evaluate提取项目版本,用bash字符串匹配判断是否包含SNAPSHOT,自动切换目标仓库 - 敏感配置隐藏:所有Artifactory地址、仓库key、认证信息都存在GitHub Secrets中,不会出现在代码或构建日志里
- 构建信息捕获:JFrog CLI执行
jf mvn命令时会自动收集构建元数据,执行jf build-publish后可在Artifactory中查看完整构建信息 - 无需修改pom.xml:通过
altDeploymentRepository参数指定部署仓库,完全不用在项目pom里配置仓库信息
内容的提问来源于stack exchange,提问作者SputNick
相关产品推荐
相关产品推荐

