我有一个JavaScript数组,如:
[["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"]]
Run Code Online (Sandbox Code Playgroud)
我将如何将单独的内部数组合并为:
["$6", "$12", "$25", ...]
Run Code Online (Sandbox Code Playgroud) 所以,我知道我可以这样做:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
Run Code Online (Sandbox Code Playgroud)
并拥有sitelist和anotherlist都包含www.foo.com和www.bar.com.不过,我真正想要的是anotherlist对还包含www.baz.com,而无需重复www.foo.com和www.baz.com.
这样做会在YAML解析器中出现语法错误:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
Run Code Online (Sandbox Code Playgroud)
只使用锚和别名,似乎不可能做我想要的而不添加另一级子结构,例如:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
Run Code Online (Sandbox Code Playgroud)
这意味着此YAML文件的使用者必须了解它.
有一种纯粹的YAML方式做这样的事情吗?或者我是否必须使用一些后YAML处理,例如实现变量替换或自动提升某些类型的子结构?我已经在进行那种后处理来处理其他一些用例,所以我并不完全厌恶它.但我的YAML文件将由人类编写,而不是由机器生成,因此我希望尽量减少用户在标准YAML语法之上需要记忆的规则数量.
我也希望能够用地图做类似的事情:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
Run Code Online (Sandbox Code Playgroud)
我有一个搜索YAML规范,但找不到任何东西,所以我怀疑答案只是"不,你不能这样做".但是,如果有人有任何想法会很棒.
编辑:由于没有答案,我假设没有人发现我在YAML规范中没有的任何东西,并且这不能在YAML层完成.所以我打开了一个问题,想要对YAML进行后处理以帮助解决这个问题,以防将来有人发现这个问题.
我正在使用Jammit将资产打包为Rails应用程序,我有一些资产文件,我希望将其包含在几个组中.例如,我希望Sammy及其插件同时包含在我的mobile和screenJS包中.
我试过这个:
sammy: &SAMMY
- public/javascripts/vendor/sammy.js
- public/javascripts/vendor/sammy*.js
mobile:
<<: *SAMMY
- public/javascripts/something_else.js
Run Code Online (Sandbox Code Playgroud)
还有这个:
mobile:
- *SAMMY
Run Code Online (Sandbox Code Playgroud)
但两者都把Sammy JS文件放在嵌套数组中,Jammit无法理解.是否有将Array的元素直接包含在另一个Array中的语法?
注意:我意识到在这种情况下,SAMMYArray 中只有两个元素,因此在每个包中给每个元素一个别名和引用都不会太糟糕.这种情况很好,但是当有五个或十个具有特定加载顺序的元素时,很快就无法维护.
我设置了GitLab和GitLab CI来托管和测试我的一些私人回购.对于我在这个系统下的作曲家模块,我设置了Satis来解析我的私人包.
显然这些私有包需要一个ssh密钥来克隆它们,我在终端中工作 - 我可以运行composer install并获取这些包,只要我ssh-add在shell中添加了密钥.
但是,当在GitLab CI中运行我的测试时,如果项目具有任何这些依赖项,则测试将无法完成,因为我的GitLab实例需要身份验证才能获得deps(显然),并且测试失败了Host key verification failed.
我的问题是如何设置它以便当跑步者运行测试时它可以在没有密码的情况下对gitlab进行身份验证?我已经尝试在我的runners ~/.ssh文件夹中放置一个无密码的ssh-key ,但是构建甚至不会添加密钥,"eval ssh-agent -s"后面跟ssh-add似乎没有说代理没有运行...
ssh continuous-integration gitlab gitlab-ci gitlab-ci-runner
假设我有:
base_array:
-1
-2
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做:
my_array: << base_array
-3
Run Code Online (Sandbox Code Playgroud)
所以my_array是 [1,2,3]
更新:我应该指定我希望扩展发生在YAML本身内部.
根据构建来自的分支,我需要使用稍微不同的命令行参数。特别是我想在从分支构建时上传快照关系工件,并在构建主时释放工件。
有没有办法有条件地改变变量?
我尝试使用像这样的 except/only 关键字
stages:
- stage
variables:
TYPE: Release
.upload_common:
stage: stage
tags: ["Win"]
script:
- echo Uploading %TYPE%
.upload_snapshot:
variables:
TYPE: "Snapshot"
except:
- master
upload:
extends:
- .upload_common
- .upload_snapshot
Run Code Online (Sandbox Code Playgroud)
不幸的是,它在构建 master 时跳过了整个上传步骤。
我在这里使用“扩展”模式的原因是我有 win 和 mac 平台,它们使用稍微不同的变量替换语法($ vs %)。我还有一些不同的构建配置 - 调试/发布,32 位/64 位。
下面的代码确实有效,但我不得不重复发布和快照的步骤,一次启用一个。
stages:
- stage
.upload_common:
stage: stage
tags: ["Win"]
script:
- echo Uploading %TYPE%
.upload_snapshot:
variables:
TYPE: "Snapshot"
except:
- master
.upload_release:
variables:
TYPE: "Release"
only:
- master
upload_release:
extends:
- .upload_common …Run Code Online (Sandbox Code Playgroud)
- 解析配置文件时出错:yaml:第 22 行:未找到预期的密钥
- 在配置文件的部分中找不到名为
build运行的作业。jobs:
我遇到了这些错误,但我对 yaml 真的很陌生,所以我无法真正找到它不起作用的原因。有任何想法吗?有人说它可能有额外的空格或其他东西,但我真的找不到它。
yaml 文件
defaults: &defaults:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
- v1-dependencies-
- run: npm install
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
version: 2
jobs:
build:
docker:
- image: circleci/node:10.3.0
working_directory: ~/repo
steps:
<<: *defaults // << here
- run: npm run test
- run: npm run build
deploy:
docker:
- image: circleci/node:10.3.0
working_directory: ~/repo
steps:
<<: *defaults
- run:
name: Deploy …Run Code Online (Sandbox Code Playgroud) 我试图实现一个 OpenAPI 定义,其中我将允许值的共享、完整列表定义为枚举,然后在不同位置使用值的子组来显示每种情况下允许哪些值。
使用Swagger.io 上枚举规范的示例,如果我有这样的定义:
paths:
/products:
get:
parameters:
- in: query
name: color
required: true
schema:
$ref: '#/components/schemas/Color'
responses:
'200':
description: OK
components:
schemas:
Color:
type: string
enum:
- black
- white
- red
- green
- blue
Run Code Online (Sandbox Code Playgroud)
那么是否可以定义例如两个以颜色作为参数的不同路径,但其中一个仅接受black或white另一个接受所有颜色?
即有没有办法转换这个例子:
myhash:
- name: name1
value: value1
myhash:
- name: name2
value: value2
Run Code Online (Sandbox Code Playgroud)
进入:
myhash:
- name: name1
value: value1
- name: name2
value: value2
Run Code Online (Sandbox Code Playgroud)
一旦我注意到默认情况下 YAML 将其转换为:
myhash:
- name: name2
value: value2
Run Code Online (Sandbox Code Playgroud)