在流水线中使用 Nexus

Nexus 是存储、组织和分发制品的存储管理器。使用 Nexus 的开发者可以更好的控制开发过程中所需的工件。

本教程演示如何在 KubeSphere 流水线中使用 Nexus。

准备工作

动手实验

步骤 1:获得 Nexus 上的仓库 URL

  1. admin 帐户登录 Nexus 控制台,然后在顶部导航栏点击

  2. 转到仓库页面,您可以看到 Nexus 提供了三种仓库类型。

    • proxy:远程仓库代理,用于下载资源并将其作为缓存存储在 Nexus 上。

    • hosted:在 Nexus 上存储制品的仓库。

    • group:一组已配置好的 Nexus 仓库。

    repo-type

  3. 点击仓库查看它的详细信息。例如:点击 maven-public 进去详情页面,并且查看它的 URL。

    maven-public-url

步骤 2:在 GitHub 仓库修改 pom.xml

  1. 登录 GitHub,fork 示例仓库到您的 GitHub 帐户。

  2. 在您的 learn-pipline-java GitHub 仓库中,点击根目录下的文件 pom.xml

    click-pom

  3. 在文件中点击 以修改 <distributionManagement> 代码片段。设置 <id> 并使用您的 Nexus 仓库的 URL。

    modify-pom

  4. 当您完成以上步骤,点击页面下方的 Commit changes

步骤 3:修改 ConfigMap

  1. 使用 admin 帐户登录 KubeSphere Web 控制台,点击左上角的平台管理,选择集群管理

  2. 配置中心下面选择 配置。在 配置 页面上的下拉列表中选择 kubesphere-devops-system ,然后点击 ks-devops-agent

    ks-devops-agent

  3. 在详情页面,点击下拉菜单更多操作中的编辑配置文件

    click-edit-yaml

  4. 在显示的会话窗中,向下滚动,找到 <servers> 代码片段,输入下列代码:

    <servers>
      <server>
        <id>nexus</id>
        <username>admin</username>
        <password>admin</password>
      </server>
    </servers>
    

    enter-server-code

    备注

    <id> 是您在步骤 2 设置给 Nexus 的唯一标识符。 <username> 是您的 Nexus 用户名。 <password> 是您的 Nexus 的密码。您也可以在 Nexus 上面配置 NuGet API Key,以获得更高的安全性。
  5. 继续找到 <mirrors> 代码片段,然后输入一下代码:

    <mirrors>
      <mirror>
        <id>nexus</id>
        <name>maven-public</name>
        <url>http://135.68.37.85:8081/repository/maven-public/</url>
        <mirrorOf>*</mirrorOf>
      </mirror>
    </mirrors>
    

    enter-mirror-code

    备注

    <id> 是您在步骤 2 设置给 Nexus 唯一标识符。 <name> 是 Nexus 仓库的名字。 <url> 是您 Nexus 仓库的 URL。 <mirrorOf> 是要镜像的 Maven 仓库。在本教程,输入 * 镜像所有 Maven 仓库。有关更多信息请参考为仓库使用镜像
  6. 当您完成,点击更新

步骤 4:创建流水线

  1. 登出 KubeSphere Web 控制台,使用帐户 project-regular 登录。转到 DevOps 工程,然后在流水线页面点击创建

  2. 基础信息选项卡中,为流水线设置名字(例如,nexus-pipeline),然后点击下一步

    set-pipeline-name

  3. 高级设置选项卡中,点击创建以使用默认配置。

  4. 点击流水线进入它的详情页面,然后点击编辑 Jenkinsfile

    click-edit-jenkinsfile

  5. 在出现的会话窗口中,在 Jenkinsfile 中输入如下内容。当您完成,点击确定

    pipeline {
        agent {
          node {
            label 'maven'
          }
        }
        stages {
            stage ('clone') {
                steps {
                    git 'https://github.com/YANGMAO-ZHANG/learn-pipeline-java.git'
                }
            }
               
            stage ('build') {
                steps {
                    container ('maven') {
                        sh 'mvn clean package'
                    }
                }  
            }
               
            stage ('deploy to Nexus') {
                steps {
                    container ('maven') {
                        sh 'mvn deploy -DaltDeploymentRepository=nexus::default::http://135.68.37.85:8081/repository/maven-snapshots/'
                    }   
                }
            }
            stage ('upload') {
                steps {
                    archiveArtifacts artifacts: 'target/*.jar', followSymlinks: false
                }
            }
        }
    }
    

    enter-jenkinsfile

    备注

    您需要用您自己的 GitHub 仓库地址替换原有的仓库地址。在 deploy to Nexus 阶段的步骤中的命令中,nexus 是您在 ConfigMap 上设置在 <id> 上的名字,同时 http://135.68.37.85:8081/repository/maven-snapshots/ 是您 Nexus 仓库的 URL。

步骤 5:运行流水线查看结果

  1. 您可以在图形编辑面板中看到所有的阶段和步骤,点击运行去运行流水线。

    click-run

  2. 一段时间过后,你可以看到流水线的状态显示成功。点击成功的记录查看细节。

    pipeline-success

  3. 您可以点击查看日志查看更详细的日志。

    pipeline-logs

  4. 登录 Nexus 点击浏览。点击 maven-public,可以看到所有依赖已经被下载好。

    maven-public

  5. 回到 Browse 页面,点击 maven-sanpshots。可以看到所有 JAR 包已经被上传到仓库。

    maven-snapshots


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。