使用 Skipper

本节是 Skipper 的“三小时游览”。 详细介绍了如何配置和使用Skipper的主要功能集。 我们将介绍 shell、平台、包和存储库。spring-doc.cadn.net.cn

请随时在 Stack Overflow 上提问。 问题可以在 Github 问题上提交。spring-doc.cadn.net.cn

12. 船长壳

shell 基于 Spring Shell 项目。 shell 的两个最佳功能是制表符补全和命令着色。 使用“help”命令或--help参数来获取帮助信息。 使用--help参数如下:spring-doc.cadn.net.cn

Skipper Options:

  --spring.cloud.skipper.client.serverUri=<uri>                        Address of the Skipper Server [default: http://localhost:7577].
  --spring.cloud.skipper.client.username=<USER>                        Username of the Skipper Server [no default].
  --spring.cloud.skipper.client.password=<PASSWORD>                    Password of the Skipper Server [no default].
  --spring.cloud.skipper.client.credentials-provider-command=<COMMAND> Runs an external command, which must return an OAuth Access Token [no default].
  --spring.cloud.skipper.client.skip-ssl-validation=<true|false>       Accept any SSL certificate (even self-signed) [default: no].

  --spring.shell.historySize=<SIZE>                 Default size of the shell log file [default: 3000].
  --spring.shell.commandFile=<FILE>                 Skipper Shell read commands read from the file(s) and then exits.

  --help                                            This message.

12.1. Shell 模式

shell 可以在交互式或非交互式模式下启动。 在非交互模式的情况下,命令行参数作为 Skipper 命令运行,然后 shell 退出。 如果存在任何不具有前缀的参数spring.cloud.skipper.client,它们被视为要运行的 skipper 命令。spring-doc.cadn.net.cn

请考虑以下示例:spring-doc.cadn.net.cn

java -jar spring-cloud-skipper-shell-2.11.5.jar --spring.cloud.skipper.client.serverUri=http://localhost:9123/api

前面的示例将调出交互式 shell 并连接到localhost:9123/api. 现在考虑以下命令:spring-doc.cadn.net.cn

$ java -jar spring-cloud-skipper-shell-2.11.5.jar --spring.cloud.skipper.client.serverUri=http://localhost:9123/api search

前面的命令连接到localhost:9123/api,运行search命令,然后退出。spring-doc.cadn.net.cn

更常见的用例是从 CI 作业中更新包,例如,在 Jenkins 阶段中,如以下示例所示:spring-doc.cadn.net.cn

stage ('Build') {
    steps {
        checkout([
            $class: 'GitSCM',
            branches: [
                [name: "*/master"]
            ],
            userRemoteConfigs: [
                [url: "https://github.com/markpollack/skipper-samples.git"]
            ]
        ])
        sh '''
            VERSION="1.0.0.M1-$(date +%Y%m%d_%H%M%S)-VERSION"
            mvn org.codehaus.mojo:versions-maven-plugin:2.3:set -DnewVersion="${VERSION}"
            mvn install
            java -jar /home/mpollack/software/skipper.jar upgrade --package-name helloworld --release-name helloworld-jenkins --properties version=${VERSION}
        '''
    }
}

13. 平台

Skipper 支持部署到多个平台。 包括的平台包括 Local、Cloud Foundry 和 Kubernetes。 对于每个平台,您可以配置多个帐户。 每account name必须在所有平台上全局唯一。spring-doc.cadn.net.cn

通常,不同的accounts对应于 Cloud Foundry 的不同组织或空间,以及单个 Kubernetes 集群的不同命名空间。spring-doc.cadn.net.cn

平台是使用 Spring Boot 的外部化配置功能定义的。 为了简化入门体验,如果配置中未定义本地平台帐户,Skipper会创建local名为default.spring-doc.cadn.net.cn

您可以利用 Spring Cloud Config 的加密和解密功能作为保护凭据的一种方法。spring-doc.cadn.net.cn

与 Skipper 部署应用程序的位置不同,您还可以在平台上运行 Skipper 服务器本身。 在其他平台上安装在安装部分介绍。spring-doc.cadn.net.cn

以下示例 YAML 文件显示了所有三个平台的配置:spring-doc.cadn.net.cn

spring:
  cloud:
    skipper:
      server:
        platform:
          local:
            accounts:
              localDevDebug:
                javaOpts: "-Xdebug"
          cloudfoundry:
            accounts:
              cf-dev:
                connection:
                  url: https://api.run.pivotal.io
                  org: scdf-ci
                  space: space-mark
                  domain: cfapps.io
                  username: <your-username>
                  password: <your-password>
                  skipSslValidation: false
                deployment:
                  deleteRoutes: false
          kubernetes:
            accounts:
              minikube:
                namespace: default

每个平台的可用属性可以在以下类中找到:spring-doc.cadn.net.cn

14. 套餐

包包含安装应用程序或应用程序组所需的所有信息。 描述应用程序的方法是使用 YAML 文件,该文件提供所有必要的信息来帮助 方便搜索托管在包注册表中的应用程序,并将应用程序安装到 平台。spring-doc.cadn.net.cn

为了便于自定义包,YAML 文件是模板化的。 YAML 文件的最终版本(替换所有值)称为发布manifest. Skipper 目前了解如何基于 YAML 文件部署应用程序,该文件包含以下内容所需的信息 用于部署应用程序的 Spring Cloud DeployerCloud Foundry 实现。 它描述了在哪里可以找到应用程序(HTTP、Maven 或 Docker 位置)、应用程序属性(想想 Spring 靴子@ConfigurationProperties)和部署属性(例如要使用的内存量)。spring-doc.cadn.net.cn

14.1. 包格式

包是 YAML 文件的集合,这些文件被压缩到具有以下命名约定的文件中:[PackageName]-[PackageVersion].zip(例如:mypackage-1.0.0.zip).spring-doc.cadn.net.cn

包可以定义单个应用程序或一组应用程序。spring-doc.cadn.net.cn

14.1.1. 单个应用程序

单个应用程序包文件mypackage-1.0.0.zip,解压缩时,应具有以下目录 结构:spring-doc.cadn.net.cn

mypackage-1.0.0
├── package.yml
├── templates
│   └── template.yml
└── values.yml

package.yml文件包含有关包的元数据,用于支持 Skipper 的搜索功能。 这template.yml文件包含values.yml文件。 安装包时,还可以指定占位符值,它们将覆盖values.yml文件。 Skipper 使用的模板引擎是 JMustache。 YAML 文件可以具有.yml.yaml扩展。spring-doc.cadn.net.cn

helloworld-1.0.0.ziphelloworld-docker-1.0.0.zip 文件是很好的示例,可以用作“手动”创建您自己的包的基础。spring-doc.cadn.net.cn

的源代码helloworld可以在这里找到示例。spring-doc.cadn.net.cn

14.1.2. 多个应用程序

包可以包含捆绑在其中的一组应用程序。 在这些情况下,包的结构将类似于以下内容:spring-doc.cadn.net.cn

mypackagegroup-1.0.0
├── package.yml
├── packages
│   ├── app1
│   │   ├── package.yml
│   │   ├── templates
│   │   │   └── log.yml
│   │   └── values.yml
│   └── app2
│       ├── package.yml
│       ├── templates
│       │   └── time.yml
│       └── values.yml
└── values.yml

在前面的示例中,mypackagegroup还是有自己的package.ymlvalues.yml指定包 元数据和要覆盖的值。内部的所有应用程序mypackagegroup被认为是 子包,并遵循类似于单个包的包结构。需要指定这些子包 在packages目录,mypackagegroup.spring-doc.cadn.net.cn

ticktock-1.0.0.zip 文件是一个很好的示例,可以用作“手动”创建自己的包的基础。spring-doc.cadn.net.cn

具有模板类型 CloudFoundryApplication 的包目前不支持多应用程序格式。spring-doc.cadn.net.cn

14.2. 包元数据

package.ymlfile 指定包元数据。 示例包元数据类似于以下内容:spring-doc.cadn.net.cn

# Required Fields
apiVersion: skipper.spring.io/v1
kind: SkipperPackageMetadata
name: mypackage
version: 1.0.0

# Optional Fields
packageSourceUrl: https://github.com/some-mypackage-project/v1.0.0.RELEASE
packageHomeUrl: https://some-mypackage-project/
tags: skipper, mypackage, sample
maintainer: https://github.com/maintainer
description: This is a mypackage sample.

必填字段:spring-doc.cadn.net.cn

目前唯一支持的类型SkipperPackageMetadataspring-doc.cadn.net.cn

可选字段:spring-doc.cadn.net.cn

目前,包搜索功能仅与包名称进行通配符匹配。spring-doc.cadn.net.cn

包存储库公开了index.yml包含多个元数据文档的文件,该文件使用标准的三破折号表示法来分隔文档,例如,index.yml---spring-doc.cadn.net.cn

14.3. 包模板

目前,支持两种类型的应用程序。一个有SpringCloudDeployerApplicationkind,这意味着 应用程序只能使用其相应的 Spring Cloud Deployer 部署到目标平台中 实现(CF、Kubernetes Deployer 等)。其他是CloudFoundryApplicationkind,这意味着 应用程序使用其清单支持直接部署到 Cloud Foundry 中。spring-doc.cadn.net.cn

14.3.1. Spring Cloud Deployer

template.ymlfile 具有类似于以下示例的包结构:spring-doc.cadn.net.cn

mypackage-1.0.0
├── package.yml
├── templates
│   └── template.yml
└── values.yml

实际模板文件名无关紧要,您可以有多个模板文件。这些只需要位于templates目录。spring-doc.cadn.net.cn

# template.yml
apiVersion: skipper.spring.io/v1
kind: SpringCloudDeployerApplication
metadata:
  name: mypackage
  type: sample
spec:
  resource: maven://org.mysample:mypackage
  resourceMetadata:  maven://org.mysample:mypackage:jar:metadata:{{spec.version}}
  version: {{spec.version}}
  applicationProperties:
    {{#spec.applicationProperties.entrySet}}
    {{key}}: {{value}}
    {{/spec.applicationProperties.entrySet}}
  deploymentProperties:
    {{#spec.deploymentProperties.entrySet}}
    {{key}}: {{value}}
    {{/spec.deploymentProperties.entrySet}}

apiVersion,kindspec.resource是必需的。spring-doc.cadn.net.cn

spec.resourcespec.version定义应用程序可执行文件所在的位置。这spec.resourceMetadata字段定义了包含应用程序配置属性的 Spring Boot Configuration 元数据 jar 所在的位置。这要么是 Spring Boot 超级罐子 托管在 HTTP 端点或 Maven 或 Docker 存储库下。模板占位符{{spec.version}}存在,以便 可以轻松升级特定应用程序的版本,而无需创建新的包.zip文件。spring-doc.cadn.net.cn

resource基于http://maven://docker:.指定resource遵循记录 类型spring-doc.cadn.net.cn

14.3.2. 云铸造厂

template.ymlfile 具有类似于以下示例的包结构:spring-doc.cadn.net.cn

mypackage-1.0.0
├── package.yml
├── templates
│   └── template.yml
└── values.yml

template.yml通常具有类似于以下内容的内容:spring-doc.cadn.net.cn

实际模板文件名无关紧要,您可以有多个模板文件。这些只需要位于templates目录。spring-doc.cadn.net.cn

# template.yml
apiVersion: skipper.spring.io/v1
kind: CloudFoundryApplication
spec:
  resource: maven://org.mysample:mypackage
  version: {{spec.version}}
  manifest:
    {{#spec.manifest.entrySet}}
    {{key}}: {{value}}
    {{/spec.manifest.entrySet}}

例如,其中值可以是这样的:spring-doc.cadn.net.cn

# values.yml
spec:
  version: 1.0.0
  manifest:
    memory: 1024
    disk-quota: 1024

一个spec.manifest是:spring-doc.cadn.net.cn

钥匙 笔记

buildpackspring-doc.cadn.net.cn

(字符串)spring-doc.cadn.net.cn

buildpack 属性。spring-doc.cadn.net.cn

commandspring-doc.cadn.net.cn

(字符串)spring-doc.cadn.net.cn

command 属性。spring-doc.cadn.net.cn

memoryspring-doc.cadn.net.cn

(字符串或整数)spring-doc.cadn.net.cn

memory 属性,如果类型为 Integer,则 String 在 CF 中使用相同的格式进行转换,例如1024M2G.10241024M是等价的。spring-doc.cadn.net.cn

disk-quotaspring-doc.cadn.net.cn

(字符串或整数)spring-doc.cadn.net.cn

如果类型为 Integer,则disk_quota属性,则 String 在 CF 中使用相同的格式进行转换,例如1024M2G.10241024M是等价的。spring-doc.cadn.net.cn

timeoutspring-doc.cadn.net.cn

(整数)spring-doc.cadn.net.cn

timeout 属性。spring-doc.cadn.net.cn

instancesspring-doc.cadn.net.cn

(整数)spring-doc.cadn.net.cn

instances 属性。spring-doc.cadn.net.cn

no-hostnamespring-doc.cadn.net.cn

(布尔值)spring-doc.cadn.net.cn

no-hostname 属性。spring-doc.cadn.net.cn

no-routespring-doc.cadn.net.cn

(布尔值)spring-doc.cadn.net.cn

no-route 属性。spring-doc.cadn.net.cn

random-routespring-doc.cadn.net.cn

(布尔值)spring-doc.cadn.net.cn

random-route 属性。spring-doc.cadn.net.cn

health-check-typespring-doc.cadn.net.cn

(字符串)spring-doc.cadn.net.cn

health-check-type 的可能值为port,processhttp.spring-doc.cadn.net.cn

health-check-http-endpointspring-doc.cadn.net.cn

(字符串)spring-doc.cadn.net.cn

health-check-http-endpoint 属性。spring-doc.cadn.net.cn

stackspring-doc.cadn.net.cn

(字符串)spring-doc.cadn.net.cn

stack 属性。spring-doc.cadn.net.cn

servicesspring-doc.cadn.net.cn

(列表<字符串>)spring-doc.cadn.net.cn

services 属性。spring-doc.cadn.net.cn

domainsspring-doc.cadn.net.cn

(列表<字符串>)spring-doc.cadn.net.cn

domains 属性。spring-doc.cadn.net.cn

hostsspring-doc.cadn.net.cn

(列表<字符串>)spring-doc.cadn.net.cn

hosts 属性。spring-doc.cadn.net.cn

envspring-doc.cadn.net.cn

(映射<字符串,对象>)spring-doc.cadn.net.cn

env 属性。spring-doc.cadn.net.cn

请记住,当从命令行给出值时,替换将按照模板中的定义进行。使用模板 格式{{#spec.manifest.entrySet}}如上所示,列表将以格式给出spec.manifest.services=[service1, service2]地图将以格式给出spec.manifest.env={key1: value1, key2: value2}.spring-doc.cadn.net.cn

resource基于http://maven://docker:.指定resource遵循记录 类型spring-doc.cadn.net.cn

14.3.3. 资源

本部分包含当前支持的资源类型。spring-doc.cadn.net.cn

HTTP 资源

以下示例显示了 HTTP 的典型规范:spring-doc.cadn.net.cn

spec:
  resource: https://example.com/app/hello-world
  version: 1.0.0.RELEASE

对于基于 HTTP 的资源,必须遵循一个命名约定,以便 Skipper 可以从resourceversion字段,并解析给定 URL 的版本号。前面的spec引用 URLexample.com/app/hello-world-1.0.0.RELEASE.jar. 这resourceversion字段在字符后不应有任何数字。-spring-doc.cadn.net.cn

Docker 资源

以下示例显示了 Docker 的典型规范:spring-doc.cadn.net.cn

spec:
  resource: docker:springcloud/spring-cloud-skipper-samples-helloworld
  version: 1.0.0.RELEASE

与 docker 注册表名称的映射如下:spring-doc.cadn.net.cn

spec:
  resource: docker:<user>/<repo>
  version: <tag>
Maven 资源

以下示例显示了 Maven 的典型规范:spring-doc.cadn.net.cn

spec:
  resource: maven://org.springframework.cloud.samples:spring-cloud-skipper-samples-helloworld:1.0.0.RELEASE
  version: 1.0.0.RELEASE

与 Maven 工件名称的映射如下spring-doc.cadn.net.cn

spec:
  resource: maven://<maven-group-name>:<maven-artifact-name>
  version:<maven-version>

只有一个设置需要指定要搜索的Maven存储库。 此设置适用于所有平台帐户。 默认情况下,使用以下配置:spring-doc.cadn.net.cn

maven:
  remoteRepositories:
    springRepo: https://repo.spring.io/snapshot

您可以指定其他条目,也可以指定代理属性。 目前最好地记录在这里。 本质上,这需要在启动属性中设置为属性,或者manifest.yml(推到 PCF 时),如下所示:spring-doc.cadn.net.cn

# manifest.yml
...
env:
    SPRING_APPLICATION_JSON: '{"maven": { "remote-repositories": { "springRepo": { "url": "https://repo.spring.io/snapshot"} } } }'
...

元数据部分用于帮助在安装应用程序后搜索应用程序。 此功能将在将来的版本中提供。spring-doc.cadn.net.cn

spec包含包的资源规范和属性。spring-doc.cadn.net.cn

resource表示要从中下载应用程序的资源 URI。 这通常是 Maven 坐标或 Docker 镜像 URL。spring-doc.cadn.net.cn

SpringCloudDeployerApplication应用程序类型可以有applicationPropertiesdeploymentProperties作为配置属性。spring-doc.cadn.net.cn

应用程序属性对应于应用程序本身的属性。spring-doc.cadn.net.cn

部署属性对应于 Spring Cloud Deployer 执行的部署作的属性 实现。spring-doc.cadn.net.cn

name模板文件可以是任何内容,因为下面的所有文件templates目录被加载以应用 模板配置。spring-doc.cadn.net.cn

14.4. 包值

values.ymlfile 包含模板文件中指定的任何键的默认值。spring-doc.cadn.net.cn

例如,在定义一个应用程序的包中,格式如下:spring-doc.cadn.net.cn

version: 1.0.0.RELEASE
spec:
  applicationProperties:
    server.port: 9090

如果包定义了多个应用程序,请在顶级 YML 部分提供包的名称,以限定spec部分。考虑具有以下布局的多个应用程序包的示例:spring-doc.cadn.net.cn

ticktock-1.0.0/
├── packages
│   ├── log
│   │   ├── package.yml
│   │   └── values.yml
│   └── time
│       ├── package.yml
│       └── values.yml
├── package.yml
└── values.yml

顶层values.yml文件可能类似于以下内容:spring-doc.cadn.net.cn

#values.yml

hello: world

time:
  appVersion: 1.3.0.M1
  deployment:
    applicationProperties:
      log.level: WARN
      trigger.fixed-delay: 1
log:
  deployment:
    count: 2
    applicationProperties:
      log.level: WARN
      log.name: skipperlogger

前面的values.yml文件集hello作为变量,可用作packages\log\values.ymlfile 和packages\time\values.yml.但是,下面的 YML 部分time:应用 仅对packages\time\values.yml文件和 YML 部分log:仅应用于packages\log\values.yml文件。spring-doc.cadn.net.cn

14.5. 包上传

在上一节所示的结构中创建包后,我们可以使用以下命名方案将其压缩为 zip 文件: [PackageName]-[PackageVersion].zip(例如,mypackage-1.0.0.zip)。spring-doc.cadn.net.cn

例如,压缩前的包目录类似于以下内容:spring-doc.cadn.net.cn

mypackage-1.0.0
├── package.yml
├── templates
│   └── template.yml
└── values.yml

zip 文件可以上传到 Skipper 服务器的本地存储库之一。 默认情况下,Skipper 服务器有一个本地存储库,其名称为local.spring-doc.cadn.net.cn

通过使用 Skipper shell,我们可以将包 zip 文件上传到 Skipper 服务器的本地仓库中,如下所示:spring-doc.cadn.net.cn

skipper:>package upload --path /path-to-package/mypackage-1.0.0.zip
Package uploaded successfully:[mypackage:1.0.0]

如果没有--repo-name设置时,则upload命令使用local作为要上传的存储库。spring-doc.cadn.net.cn

然后,我们可以使用package listpackage search命令来查看我们的包是否已上传,如以下示例所示(及其输出):spring-doc.cadn.net.cn

skipper:>package list
╔═════════════════╤═══════╤════════════════════════════════════════════════════════════════════════════════╗
║      Name       │Version│                                  Description                                   ║
╠═════════════════╪═══════╪════════════════════════════════════════════════════════════════════════════════╣
║helloworld       │1.0.0  │The app has two endpoints, /about and /greeting in English.  Maven resource.    ║
║helloworld       │1.0.1  │The app has two endpoints, /about and /greeting in Portuguese.  Maven resource. ║
║helloworld-docker│1.0.0  │The app has two endpoints, /about and /greeting in English.  Docker resource.   ║
║helloworld-docker│1.0.1  │The app has two endpoints, /about and /greeting in Portuguese.  Docker resource.║
║mypackage        │1.0.0  │This is a mypackage sample                                                      ║
╚═════════════════╧═══════╧════════════════════════════════════════════════════════════════════════════════╝

14.6. 创建您自己的包

在本节中,我们将创建一个可以使用 Spring Cloud Deployer 实现进行部署的包。spring-doc.cadn.net.cn

对于这个包,我们将创建一个简单的包并将其上传到我们的本地计算机。spring-doc.cadn.net.cn

若要开始创建自己的包,请按照命名约定[package-name]-[package-version].在我们的例子中,文件夹名称是demo-1.0.0. 在此目录中,创建名为values.ymlpackage.yml并创建一个templates目录。 在templates目录下,创建一个名为template.yml.spring-doc.cadn.net.cn

进入package.yml我们将在其中指定包元数据。对于此应用,我们仅填充可能的最小值,如以下示例所示:spring-doc.cadn.net.cn

# package.yml

apiVersion: skipper.spring.io/v1
kind: SkipperPackageMetadata
name: demo
version: 1.0.0
description: Greets the world!
确保您的nameversion匹配nameversion,否则您收到错误。

接下来,打开你的templates/template.yml文件。 在这里,我们将指定有关您的包的实际信息,最重要的是,设置默认值。 在template.yml,复制SpringCloudDeployerApplication从前面的样本中。 您的结果template.yml文件应类似于以下内容:spring-doc.cadn.net.cn

# templates/template.yml

apiVersion: skipper.spring.io/v1
kind: SpringCloudDeployerApplication
metadata:
  name: demo
spec:
  resource: maven://org.springframework.cloud.samples:spring-cloud-skipper-samples-helloworld
  version: {{version}}
  applicationProperties:
    {{#spec.applicationProperties.entrySet}}
    {{key}}: {{value}}
    {{/spec.applicationProperties.entrySet}}
  deploymentProperties:
    {{#spec.deploymentProperties.entrySet}}
    {{key}}: {{value}}
    {{/spec.deploymentProperties.entrySet}}

前面的示例文件指定我们的应用程序名称为demo并在 Maven 中找到我们的包。 现在我们可以指定version,applicationPropertiesdeploymentProperties在我们的values.yml如下:spring-doc.cadn.net.cn

# values.yml

# This is a YAML-formatted file.
# Declare variables to be passed into your templates
version: 1.0.0.RELEASE
spec:
  applicationProperties:
    server.port: 8100

前面的示例将version1.0.0.RELEASE并设置server.port=8100作为应用程序属性之一。 当 Skipper Package 读取器通过合并values.yml对于模板,解析值类似于以下内容:spring-doc.cadn.net.cn

# hypothetical template.yml

apiVersion: skipper.spring.io/v1
kind: SpringCloudDeployerApplication
metadata:
  name: demo
spec:
  resource: maven://org.springframework.cloud.samples:spring-cloud-skipper-samples-helloworld
  version: 1.0.0.RELEASE
  applicationProperties:
    server.port: 8100
  deploymentProperties:

使用的原因values.yml它允许您在运行时使用--file--properties标志。spring-doc.cadn.net.cn

我们已经完成了我们的文件制作。 现在我们必须拉上拉链。 最简单的方法是使用zip -r命令,如下所示:spring-doc.cadn.net.cn

$ zip -r demo-1.0.0.zip demo-1.0.0/
  adding: demo-1.0.0/ (stored 0%)
  adding: demo-1.0.0/package.yml (deflated 14%)
  adding: demo-1.0.0/templates/ (stored 0%)
  adding: demo-1.0.0/templates/template.yml (deflated 55%)
  adding: demo-1.0.0/values.yml (deflated 4%)

有了压缩文件及其路径,我们可以前往 Skipper 并使用upload命令,如下所示:spring-doc.cadn.net.cn

skipper:>package upload --path /Users/path-to-your-zip/demo-1.0.0.zip
Package uploaded successfully:[demo:1.0.0]

现在您可以如前所示搜索它,然后安装它,如下所示spring-doc.cadn.net.cn

skipper:>package install --package-name demo --package-version 1.0.0 --release-name demo
Released demo. Now at version v1.

祝贺!您现在已经创建、打包、上传和安装了自己的 Skipper 包!spring-doc.cadn.net.cn

15. 存储库

存储库存储包元数据和主机包.zip文件。 存储库可以是本地的,也可以是远程的,本地意味着由 Skipper 的关系数据库支持,远程意味着通过 HTTP 公开的文件系统。spring-doc.cadn.net.cn

注册远程注册表时(例如,experimental除了一个名为 local' 之外,当前默认情况下未定义的 Local'),使用以下格式:spring-doc.cadn.net.cn

spring
  cloud:
    skipper:
      server:
        package-repositories:
          experimental:
            url: https://skipper-repository.cfapps.io/repository/experimental
            description: Experimental Skipper Repository
            repoOrder: 0
          local:
            url: http://${spring.cloud.client.hostname}:7577
            local: true
            description: Default local database backed repository
            repoOrder: 1
对于 Skipper 2.x,spring.cloud.skipper.server.package-repositories结构已从列表更改为映射,其中 key 是存储库名称。使用映射格式可以更轻松地定义和覆盖配置值。

repoOrder确定如果在两个或多个存储库中注册了具有相同名称的包,则确定哪个存储库提供包。spring-doc.cadn.net.cn

远程存储库假定的目录结构是已注册的url值后跟包名称,然后是 zip 文件名(例如skipper-repository.cfapps.io/repository/experimental/helloworld/helloworld-1.0.0.zip对于包装helloworld使用1.0.0). 名为index.yml预计直接隶属于注册的url——例如,skipper-repository.cfapps.io/repository/experimental/index.yml。 此文件包含存储库托管的所有包的包元数据。spring-doc.cadn.net.cn

由您来更新index.yml远程存储库的文件“'by hand'”。spring-doc.cadn.net.cn

“本地”存储库由 Skipper 的数据库支持。 在 Skipper 1.0 版本中,它们不会像远程存储库那样在类似文件系统的 URL 结构下公开index.yml或.zip文件。 此功能将在下一个版本中提供。 但是,您可以将包上传到本地存储库,并且不需要维护索引文件。 有关创建本地存储库的信息,请参阅“Skipper 命令”部分。spring-doc.cadn.net.cn

可以在此处找到一个很好的示例,该示例展示了使用具有静态资源的 Spring Boot Web 应用程序来托管存储库。 此应用程序目前在 skipper-repository.cfapps.io/repository/experimental 下运行。spring-doc.cadn.net.cn