使用跳过器

This section is the "三小时速览" of Skipper.<br/>它详细介绍了如何配置和使用Skipper的主要功能集。<br/>我们将介绍shell、平台、包和存储库。spring-doc.cadn.net.cn

请在 Stack Overflow 上提出问题。可以在 GitHub issues 中提交问题。spring-doc.cadn.net.cn

12. 跳过器外壳

Shell 基于 Spring Shell 项目。Shell 的两个最佳特性是命令的自动补全和着色显示。
使用 'help' 命令或在启动 shell 时使用 --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. 平台

跳过器支持部署到多个平台。 这些平台包括本地、云发现和Kubernetes。 对于每个平台,您可以配置多个账户。 每个 account name 必须在所有平台上全局唯一。spring-doc.cadn.net.cn

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

平台是通过使用 Spring Boot 的 外部化配置 功能来定义的。
为了简化入门体验,如果您的配置中没有定义本地平台帐户,则 Skipper 将创建一个名为 localdefault 实现。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. 包

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

为了便于自定义包,YAML 文件是模板化的。
替换所有值后的最终 YAML 版本称为发布 manifest
Skipper 目前了解如何基于包含所需信息的 YAML 文件部署应用程序,这些信息用于 Spring Cloud DeployerCloud Foundry 实现来部署应用程序。
它描述了找到应用程序的位置(HTTP、Maven 或 Docker 位置)、应用程序属性(考虑 Spring Boot @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

文件包含有关软件包的元数据,并用于支持Skipper的搜索功能。
文件包含在文件中指定值的占位符。
安装软件包时,也可以指定占位符值,这些值将覆盖文件中的值。
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目录内指定,即mypackagegroupspring-doc.cadn.net.cn

文件 ticktock-1.0.0.zip 是一个很好的示例,可以作为创建您自己的包的起点。spring-doc.cadn.net.cn

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

14.2. 包元数据

文件package.yml指定了包元数据。一个包元数据的示例看起来像下面这样: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

目前仅支持 kindSkipperPackageMetadataspring-doc.cadn.net.cn

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

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

一个软件包仓库公开了一个index.yml文件,其中包含多个元数据文档,并使用标准的三破折号符号---来分隔这些文档——例如,index.ymlspring-doc.cadn.net.cn

14.3. 包模板

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

14.3.1. Spring Cloud Deployer

template.yml文件具有与以下示例类似的包结构: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}}

数字apiVersionkindspec.resource是必需的。spring-doc.cadn.net.cn

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

resource 基于 http://maven://docker:。指定 resource 的格式遵循在资源中记录的类型。spring-doc.cadn.net.cn

14.3.2. 云发现<br>

template.yml文件具有与以下示例类似的包结构: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}}

例如,值可以是如下形式:<br>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

命令 属性按原样。spring-doc.cadn.net.cn

memoryspring-doc.cadn.net.cn

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

memory属性如果是Integer类型则保持不变,如果为String类型,则使用与CF中相同的格式进行转换,例如1024M2G10241024M是等效的。spring-doc.cadn.net.cn

disk-quotaspring-doc.cadn.net.cn

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

磁盘配额 属性如果是 Integer 类型则保持不变,如果类型是 String,则使用与 Cloud Foundry (CF) 中相同的格式进行转换,例如 1024M2G10241024M 是等效的。spring-doc.cadn.net.cn

timeoutspring-doc.cadn.net.cn

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

超时属性保持不变。spring-doc.cadn.net.cn

instancesspring-doc.cadn.net.cn

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

实例属性保持不变。spring-doc.cadn.net.cn

no-hostnamespring-doc.cadn.net.cn

(Boolean)spring-doc.cadn.net.cn

无主机名属性与此相同。spring-doc.cadn.net.cn

no-routespring-doc.cadn.net.cn

(Boolean)spring-doc.cadn.net.cn

no-route属性保持不变。spring-doc.cadn.net.cn

random-routespring-doc.cadn.net.cn

(Boolean)spring-doc.cadn.net.cn

随机路由属性如上所述。spring-doc.cadn.net.cn

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

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

健康检查类型,可能值为portprocesshttpspring-doc.cadn.net.cn

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

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

健康检查 HTTP 端点属性原样保留。spring-doc.cadn.net.cn

stackspring-doc.cadn.net.cn

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

堆栈属性不变。spring-doc.cadn.net.cn

servicesspring-doc.cadn.net.cn

<!DOCTYPE html> <html> <head> <title>Spring Framework - English Website</title> </head> <body> <div class="container"> <h1>Welcome to Spring Framework!</h1> <p>This is a sample paragraph of text on the website.</p> <ul> <li>Feature 1</li> <li>Feature 2</li> <li>Feature 3</li> </ul> <p><a href="/docs">Documentation</a></p> </div> </body> </html>spring-doc.cadn.net.cn

services 属性如其所是。spring-doc.cadn.net.cn

domainsspring-doc.cadn.net.cn

<!DOCTYPE html> <html> <head> <title>Spring Framework - English Website</title> </head> <body> <div class="container"> <h1>Welcome to Spring Framework!</h1> <p>This is a sample paragraph of text on the website.</p> <ul> <li>Feature 1</li> <li>Feature 2</li> <li>Feature 3</li> </ul> <p><a href="/docs">Documentation</a></p> </div> </body> </html>spring-doc.cadn.net.cn

域名 属性保持不变。spring-doc.cadn.net.cn

hostsspring-doc.cadn.net.cn

<!DOCTYPE html> <html> <head> <title>Spring Framework - English Website</title> </head> <body> <div class="container"> <h1>Welcome to Spring Framework!</h1> <p>This is a sample paragraph of text on the website.</p> <ul> <li>Feature 1</li> <li>Feature 2</li> <li>Feature 3</li> </ul> <p><a href="/docs">Documentation</a></p> </div> </body> </html>spring-doc.cadn.net.cn

主机属性原样保留。spring-doc.cadn.net.cn

envspring-doc.cadn.net.cn

(Map<String,Object>)spring-doc.cadn.net.cn

env属性保持不变。spring-doc.cadn.net.cn

请注意,当从命令行提供值时,替换会按照模板中定义的方式进行。使用上面所示的{{#spec.manifest.entrySet}}格式模板,List将以spec.manifest.services=[service1, service2]格式给出,而Map将以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,并且也可以从给定的URL解析版本号。
前面的spec引用了位于example.com/app/hello-world-1.0.0.RELEASE.jar的URL。
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.yml文件包含了模板文件中指定的任何键的默认值。spring-doc.cadn.net.cn

例如,在定义一个应用程序的包中,格式如下:<br>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.yml 文件和 packages\time\values.yml 中用作占位符。但是,time: 下的 YML 部分仅适用于 packages\time\values.yml 文件,而 log: 下的 YML 部分仅适用于 packages\log\values.yml 文件。spring-doc.cadn.net.cn

14.5. 包上传

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

例如,压缩前的包目录将如下所示:spring-doc.cadn.net.cn

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

可以将压缩文件上传到 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中找到了我们的包。
现在我们可以指定versionapplicationPropertiesdeploymentProperties在我们的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

前面的例子将version设置为1.0.0.RELEASE,并将server.port=8100设置为应用程序属性之一。当Skipper包读取器通过将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文件。<br/>仓库可以是本地或远程的,其中本地表示由Skipper的关系型数据库支持,而远程表示通过HTTP公开的文件系统。spring-doc.cadn.net.cn

注册远程注册表时(例如,experimental号注册表,默认情况下尚未定义,除了名为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 结构已从列表更改为映射,其中键是仓库名称。采用映射格式可以更容易地定义和覆盖配置值。

如果在两个或多个仓库中注册了同名的包,则repoOrder确定由哪个仓库提供该包。spring-doc.cadn.net.cn

对于远程存储库,假设的目录结构是注册的url值,后跟包名称和zip文件名(例如,skipper-repository.cfapps.io/repository/experimental/helloworld/helloworld-1.0.0.zip表示具有版本1.0.0的包helloworld)。期望在注册的url下直接有一个名为index.yml的文件——例如,skipper-repository.cfapps.io/repository/experimental/index.yml。此文件包含由存储库托管的所有软件包的元数据。spring-doc.cadn.net.cn

对于远程仓库,您需要手动更新index.yml文件。spring-doc.cadn.net.cn

'Local' 存储库由 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