快速开始

本文档将帮助您快速了解如何创建一个 JFrog connector,以连接到 JFrog Artifactory 实例,并安全地执行 Maven 构建操作,而无需直接处理凭据。

我们将创建一个 JFrog connector,并使用它通过指向 JFrog Artifactory Maven 仓库的 Maven 镜像执行 mvn 构建。

预计阅读时间

15 分钟

前提条件

  • 已安装 Connectors 系统(Operator、ConnectorsCore 和 ConnectorsJFrog 组件)的 Kubernetes 集群。有关安装这些组件的详细信息,请参阅安装指南
  • JFrog Artifactory 的 URL 和凭据
  • Kubernetes 和 Maven 的基础知识
  • 在您的 JFrog Artifactory 实例中配置的 Maven 仓库

流程概览

步骤操作描述
1创建 Namespace为演示设置专用的命名空间
2配置 JFrog 凭据和 Connector创建认证 secret 和 JFrog connector 资源
3使用 JFrog Maven 镜像创建 Maven Job创建一个通过 connector 执行 mvn 构建的 Job

操作步骤

步骤 1:创建 Namespace

为本次演示创建一个专用的命名空间:

kubectl create ns connectors-jfrog-demo

步骤 2:创建 JFrog 凭据和 Connector

创建包含 JFrog 凭据的 Secret 和 JFrog connector 资源。

有关创建和配置 connector 的详细信息,请参阅Connectors 快速开始指南

cat <<EOF | kubectl apply -n connectors-jfrog-demo -f -
kind: Secret
apiVersion: v1
metadata:
  name: jfrog-secret
type: kubernetes.io/basic-auth
stringData:
  username: your-jfrog-username # 替换为您的 JFrog 用户名
  password: your-jfrog-password # 替换为您的 JFrog 密码或 API key
---
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: jfrog-connector
spec:
  connectorClassName: jfrog
  address: https://jfrog.example.com # 替换为您的 JFrog Artifactory URL
  auth:
    name: basicAuth
    secretRef:
      name: jfrog-secret
EOF

验证 connector 是否处于“Ready”状态:

kubectl get connector jfrog-connector -n connectors-jfrog-demo

输出应显示:

NAME               CLASS   ADDRESS                        READY   REASON   AGE
jfrog-connector   jfrog   https://jfrog.example.com     True             10s

步骤 3:使用 JFrog Maven 镜像创建 Maven Job

创建一个使用该 connector,通过 JFrog Artifactory 仓库作为镜像执行 Maven 操作的 Job:

cat <<'EOF' | kubectl apply -n connectors-jfrog-demo -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: maven-build
spec:
  backoffLimit: 0
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: maven-demo
        image: maven:3.9-eclipse-temurin-17
        imagePullPolicy: IfNotPresent
        command:
        - "sh"
        - "-c"
        - |
          set -ex
          git clone --depth 1 https://github.com/spring-projects/spring-petclinic.git demo
          cd demo
          mvn --settings /root/.m2/settings.xml dependency:resolve -q
        volumeMounts:
        - name: maven-settings
          mountPath: /root/.m2/settings.xml
          subPath: settings.xml
      volumes:
      - name: maven-settings
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "jfrog-connector"
            configuration.names: "settings"
            configuration.params: '{"settings":{"mirrorRepository":"libs-release"}}'
EOF

关键配置:

volumes[].volumeAttributes

  • connector.name:您的 JFrog connector 名称
  • configuration.names:设置为 settings,生成配置了 JFrog Artifactory 代理的 Maven settings.xml 文件
  • configuration.params:以配置名称为键的 JSON 字符串。本快速开始示例中使用 settings.mirrorRepository 来生成 Maven 镜像 URL。
  • 当前 JFrog ConnectorClass 模板还支持的其他键包括 npmrc.repositorynpmrc.strictSSLyarnrc.repositoryyarnrc.strictSSLpipconf.repositorypypirc.deployRepository

底层原理

JFrog connector 的工作原理:

  1. 创建一个代理服务,位于客户端和 JFrog Artifactory 实例之间
  2. 当请求通过代理时注入认证信息
  3. 为客户端提供配置文件(settings.xml.npmrcpip.conf 等),以便通过代理执行包管理操作

为了演示该机制,请查看生成的 settings.xml 文件:

cat <<EOF | kubectl apply -n connectors-jfrog-demo -f -
apiVersion: v1
kind: Pod
metadata:
  name: inspect-jfrog-settings
spec:
  restartPolicy: Never
  containers:
  - name: inspect
    image: busybox
    command: ["sleep", "3600"]
    volumeMounts:
    - name: maven-settings
      mountPath: /root/.m2/settings.xml
      subPath: settings.xml
  volumes:
  - name: maven-settings
    csi:
      readOnly: true
      driver: connectors-csi
      volumeAttributes:
        connector.name: "jfrog-connector"
        configuration.names: "settings"
        configuration.params: '{"settings":{"mirrorRepository":"libs-release"}}'
EOF

查看生成的 settings.xml

kubectl exec -it inspect-jfrog-settings -n connectors-jfrog-demo -- cat /root/.m2/settings.xml

输出显示了配置了通过 connector 认证代理的 Maven settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" ...>
  <proxies>
    <proxy>
      <id>connectors-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>connectors-proxy-service.connectors-system.svc.cluster.local</host>
      <port>80</port>
      <username>connectors-jfrog-demo/jfrog-connector</username>
      <password>TOKEN</password>
      <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
  </proxies>
  <mirrors>
    <mirror>
      <id>jfrog-connector-mirror</id>
      <url>https://jfrog.example.com/artifactory/libs-release</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
</settings>

深入阅读

成功使用 JFrog connector 执行 Maven 构建操作后,您可以:

参考资料