fixed:更新
This commit is contained in:
parent
69b97ea4da
commit
54bb8fc9de
|
|
@ -0,0 +1,14 @@
|
|||
## Cesium待实现功能
|
||||
|
||||
### 1.展示型功能
|
||||
|
||||
- [ ] 1. 分层分户单体化功能
|
||||
- [ ] 2. 模型简化(优化加载)
|
||||
- [ ] 3. 地下模式
|
||||
|
||||
|
||||
|
||||
### 2. 分析型功能
|
||||
|
||||
- [ ]
|
||||
|
||||
|
|
@ -0,0 +1,308 @@
|
|||
## Neo4j的cyhper基本语法
|
||||
|
||||
### 1. 创建节点和关系
|
||||
|
||||
#### 1.1创建节点
|
||||
|
||||
```sql
|
||||
|
||||
create (n)
|
||||
create (n),(m)
|
||||
create(n:Movie)
|
||||
create(n:Movie:Person)
|
||||
|
||||
# 创建一个带有标签(Person)和属性(name:'TEST-NAME', age:1)的节点
|
||||
create(n:Person {name:'qiusj',age:18})
|
||||
|
||||
# 返回创建的节点
|
||||
CREATE(n:TEST {name:'TEST-NAME1', age:2}) return n
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 1.2 创建关系
|
||||
|
||||
```sql
|
||||
# 创建两个节点之间的关系
|
||||
MATCH (a:TEST),(b:TEST)
|
||||
WHERE a.name = 'TEST-NAME' AND b.name = 'TEST-NAME1'
|
||||
CREATE (a)-[r:RELTYPE] -> (b)
|
||||
RETURN r
|
||||
|
||||
# 创建两个节点之间的关系,并调用两个节点的属性:
|
||||
MATCH (a:TEST),(b:TEST)
|
||||
WHERE a.name = 'TEST-NAME' AND b.name = 'TEST-NAME1'
|
||||
CREATE (a)-[r:RELTYPE { name: a.name + b.name}] -> (b)
|
||||
RETURN r
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 1.3 `merge` 命令
|
||||
|
||||
在Neo4j数据库中,**MERGE**命令是一个非常强大的工具,它结合了**CREATE**和**MATCH**命令的功能。当你需要确保一个特定的节点或关系在图中存在时,MERGE命令就显得尤为重要。如果该节点或关系不存在,MERGE将会创建它;如果已经存在,MERGE则会匹配到这个现有的元素。
|
||||
|
||||
> 如果这个节点已经存在,那么MERGE命令的作用就相当于MATCH命令。判断是否存在的方式是表达式中所有的属性组合匹配的:如 MERGE (p:Person {name: 'Alice'}) RETURN p;只要在已有的Person中name属性没有等于'Alice'的就是不存在,MERGE (p:Person {name: 'Alice,age:18}) 则要求现有的Person中的name和age都不相同才表示不存在
|
||||
|
||||
```sql
|
||||
MERGE (robert:Person { name: 'Robert' })
|
||||
RETURN robert, labels(robert)
|
||||
```
|
||||
|
||||
MERGE还可以用来创建节点之间的关系。如果两个节点之间的关系不存在,MERGE会创建这个关系。例如,以下命令会创建一个名为"Robert"的Person节点和一个名为"hanscal"的Person节点之间的FAMILY关系:
|
||||
|
||||
```sql
|
||||
MATCH (n:Person { name: 'Robert' }), (m:Person { name: "hanscal" })
|
||||
MERGE (n)-[r:FAMILY]->(m)
|
||||
RETURN n.name, type(r), m.name
|
||||
```
|
||||
|
||||
**使用ON CREATE和ON MATCH**
|
||||
|
||||
MERGE命令可以与**ON CREATE**和**ON MATCH**子句结合使用,这允许你根据元素是被匹配到还是被创建来执行不同的操作。例如,以下命令在创建新节点时设置一个时间戳属性:
|
||||
|
||||
```sql
|
||||
MERGE (c:Person { name: 'Hanscal' })
|
||||
ON CREATE SET c.create = timestamp()
|
||||
RETURN c.name, c.create
|
||||
```
|
||||
|
||||
如果节点"Hanscal"已经存在,则不会设置任何属性。相反,如果使用**ON MATCH**,则只有在匹配到节点时才会设置属性。
|
||||
|
||||
**批量操作**
|
||||
|
||||
MERGE命令也可以用于批量操作,快速创建大量的节点和关系。例如,以下命令会将所有Person节点的出生地属性与City节点连接起来,并创建BORN_IN关系:
|
||||
|
||||
```sql
|
||||
MATCH (person:Person)
|
||||
MERGE (city:City { name: person.bornIn })
|
||||
MERGE (person)-[r:BORN_IN]->(city)
|
||||
RETURN person.name, person.bornIn, city
|
||||
```
|
||||
|
||||
总的来说,`MERGE`命令在确保数据一致性和避免重复创建相同的元素时非常有用。
|
||||
|
||||
**约束与 MERGE 命令的关系**
|
||||
|
||||
- **唯一性约束**:确保指定标签的节点在特定属性上具有唯一性,是 Neo4j 保证数据完整性的重要机制
|
||||
- MERGE 命令行为:
|
||||
|
||||
- 若匹配条件的节点 / 关系存在,则返回现有节点 / 关系
|
||||
- 若不存在,则创建新的节点 / 关系
|
||||
- **冲突点**:当 MERGE 的匹配条件触发唯一性约束时,会因重复数据导致操作失败
|
||||
|
||||
|
||||
|
||||
#### 1.4 添加属性
|
||||
|
||||
方案 1:使用 MATCH 而非 MERGE(推荐)
|
||||
|
||||
```sql
|
||||
MATCH (p:Person {name: 'Robert'})
|
||||
SET p.age = 18
|
||||
RETURN p;
|
||||
```
|
||||
|
||||
方案 2:修改 MERGE 语句避免重复创建
|
||||
|
||||
```sql
|
||||
# 安全的MERGE写法(先检查节点是否存在)
|
||||
MERGE (p:Person {name: 'Robert'})
|
||||
# 仅当节点不存在时才创建新属性(避免冲突)
|
||||
ON CREATE SET p.create = timestamp()
|
||||
# 无论是否创建都可以设置属性(不会触发约束)
|
||||
SET p.money = 1
|
||||
RETURN p;
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 1.5 修改节点的关系类型
|
||||
|
||||
在 Neo4j 中,关系类型(Relationship Type)是不可变的,无法直接修改。若要更改关系类型,需通过以下步骤实现:**创建新关系 → 复制属性 → 删除旧关系**。以下是详细方法:
|
||||
|
||||
**方法一:使用 Cypher 手动转换关系类型**
|
||||
|
||||
```sql
|
||||
// 示例:将 KNOWS 关系转换为 FRIEND 关系
|
||||
MATCH (p1:Person)-[r:KNOWS]->(p2:Person)
|
||||
WHERE p1.name = 'Alice' AND p2.name = 'Bob'
|
||||
// 创建新类型的关系
|
||||
CREATE (p1)-[r2:FRIEND]->(p2)
|
||||
// 复制旧关系的所有属性到新关系
|
||||
SET r2 = r
|
||||
// 删除旧关系
|
||||
DELETE r
|
||||
RETURN p1, r2, p2;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 2.查询语法
|
||||
|
||||
> match、optional match、where、start和aggregation聚合
|
||||
|
||||
#### 2.1 match语法
|
||||
|
||||
**简单查询**
|
||||
|
||||
```sql
|
||||
# 查询所有节点
|
||||
match (n) return n
|
||||
|
||||
# 查询指定标签的节点
|
||||
match (n:Person) return n
|
||||
|
||||
# 查询指定标签和属性的节点
|
||||
match (n:Person {name:"张三"}) return n
|
||||
```
|
||||
|
||||
|
||||
|
||||
**关系查询**
|
||||
|
||||
```sql
|
||||
# 查询出度1的节点
|
||||
match (n:Person{name:"张三"})-[r]->(m) return m
|
||||
match (n:Person{name:"zhangsan"})-->(m) return m
|
||||
|
||||
# 查询入度1节点:
|
||||
match (n:Person{name:"zhangsan"})<-[r]-(m) return m
|
||||
match (n:Person{name:"zhangsan"})<--(m) return m
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.删除节点
|
||||
|
||||
- 删除无关系的孤立节点
|
||||
|
||||
使用`DELETE`语句直接删除节点
|
||||
|
||||
```sql
|
||||
// 删除单个节点(无关系)
|
||||
MATCH (p:Person {name: 'Alice'})
|
||||
DELETE p;
|
||||
|
||||
// 批量删除符合条件的节点
|
||||
MATCH (p:Person)
|
||||
WHERE p.age < 18
|
||||
DELETE p;
|
||||
```
|
||||
|
||||
- 删除带有关联关系的节点
|
||||
|
||||
需先删除关系,再删除节点。可使用`DETACH DELETE`一次性完成:
|
||||
|
||||
```sql
|
||||
// 方法1:分步删除(手动删除关系)
|
||||
MATCH (p:Person {name: 'Bob'})-[r]->()
|
||||
DELETE r; // 先删除所有外出关系
|
||||
MATCH (p:Person {name: 'Bob'})
|
||||
DELETE p; // 再删除节点
|
||||
|
||||
// 方法2:使用DETACH DELETE(推荐)
|
||||
MATCH (p:Person {name: 'Charlie'})
|
||||
DETACH DELETE p; // 自动删除节点及其所有关系
|
||||
```
|
||||
|
||||
- 基于关系条件删除节点
|
||||
|
||||
删除符合特定关系条件的节点:
|
||||
|
||||
```sql
|
||||
// 删除所有没有朋友的人(无FOLLOWS关系)
|
||||
MATCH (p:Person)
|
||||
WHERE NOT (p)-[:FOLLOWS]->()
|
||||
DELETE p;
|
||||
|
||||
// 删除被超过100人关注的明星节点
|
||||
MATCH (s:Star)<-[r:FOLLOWS]-()
|
||||
WITH s, count(r) as followers
|
||||
WHERE followers > 100
|
||||
DETACH DELETE s;
|
||||
```
|
||||
|
||||
|
||||
|
||||
- 删除整个标签的所有节点
|
||||
|
||||
```sql
|
||||
// 删除所有Person节点及其关系
|
||||
MATCH (p:Person)
|
||||
DETACH DELETE p;
|
||||
|
||||
// 更安全的分批删除方法
|
||||
CALL apoc.periodic.iterate(
|
||||
"MATCH (p:Person) RETURN p",
|
||||
"DETACH DELETE p",
|
||||
{batchSize:1000, parallel:false}
|
||||
);
|
||||
```
|
||||
|
||||
|
||||
|
||||
- 删除节点并返回删除数量
|
||||
|
||||
```sql
|
||||
MATCH (p:Person)
|
||||
WHERE p.lastLogin < date("2023-01-01")
|
||||
DETACH DELETE p
|
||||
RETURN count(*) as deletedNodes;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### 4. 删除关系
|
||||
|
||||
场景一:删除特定关系
|
||||
|
||||
```sql
|
||||
// 方法1:通过匹配节点和关系类型删除
|
||||
MATCH (p1:Person {name: 'Alice'})-[r:FRIEND]->(p2:Person {name: 'Bob'})
|
||||
DELETE r;
|
||||
|
||||
// 方法2:使用更精确的匹配条件(如属性)
|
||||
MATCH (p1:Person)-[r:WORKS_ON {projectId: 'PRJ-123'}]->(p2:Project)
|
||||
DELETE r;
|
||||
```
|
||||
|
||||
场景二:只有查询返回的ID
|
||||
|
||||
```sql
|
||||
// 方法1:使用关系ID直接删除
|
||||
MATCH ()-[r]->()
|
||||
WHERE id(r) = 5678 // 替换为实际关系ID
|
||||
DELETE r; // 仅删除关系,保留节点
|
||||
|
||||
// 方法2:验证关系后删除
|
||||
MATCH ()-[r]->()
|
||||
WHERE id(r) = 5678
|
||||
RETURN r; // 先查询确认关系是否存在
|
||||
|
||||
// 确认无误后执行删除
|
||||
MATCH ()-[r]->()
|
||||
WHERE id(r) = 5678
|
||||
DELETE r;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -42,6 +42,23 @@ docker 命令 --help # 帮助命令
|
|||
|
||||
```
|
||||
|
||||
较常用的是`docker run [OPTIONS] IMAGE [COMMAND] [ARG...] `命令
|
||||
|
||||
参数说明:
|
||||
|
||||
- **`-d`**: 后台运行容器并返回容器 ID。
|
||||
- **`-it`**: 交互式运行容器,分配一个伪终端。
|
||||
- **`--name`**: 给容器指定一个名称。
|
||||
- **`-p`**: 端口映射,格式为 `host_port:container_port`。
|
||||
- **`-v`**: 挂载卷,格式为 `host_dir:container_dir`。
|
||||
- **`--rm`**: 容器停止后自动删除容器。
|
||||
- **`--env` 或 `-e`**: 设置环境变量。
|
||||
- **`--network`**: 指定容器的网络模式。
|
||||
- **`--restart`**: 容器的重启策略(如 `no`、`on-failure`、`always`、`unless-stopped`)。
|
||||
- **`-u`**: 指定用户。
|
||||
|
||||
|
||||
|
||||
### 查看容器的元数据
|
||||
|
||||
> docker inspect 容器ID
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ yum install docker-ce docker-ce-cli containerd.io
|
|||
|
||||
登陆阿里云,找到容器镜像服务,找到镜像加速器。
|
||||
|
||||

|
||||

|
||||
|
||||
配置使用
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,352 @@
|
|||
## gitlab-ci.yml文件编写
|
||||
|
||||
> 转自:[02: gitlab-ci.yml 文件编写](https://blog.csdn.net/weixin_43730107/article/details/135839032)
|
||||
|
||||
### 1.什么是gitlab-ci.yml文件
|
||||
|
||||
`gitlab-ci.yml` 文件是 GitLab CI/CD 的配置文件,它描述了各项任务如何和何时在版本控制过程中执行。文件中定义了一系列的任务或`jobs`,这些jobs可以被组织到各个阶段,并在触发某些事件时自动运行,如代码提交或代码合并。每次提交或推送都会触发一个新的 CI/CD `pipeline`,`gitlab-ci.yml` 文件便是负责协调和控制这个 `pipeline` 执行过程的大脑。
|
||||
|
||||
### 2.创建第一个 gitlab-ci.yml 文件
|
||||
|
||||
**文件结构示例**
|
||||
|
||||
```shell
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
|
||||
build_job:
|
||||
stage: build
|
||||
script:
|
||||
- echo "This is the build stage"
|
||||
|
||||
test_job:
|
||||
stage: test
|
||||
script:
|
||||
- echo "This is the test stage"
|
||||
|
||||
deploy_job:
|
||||
stage: deploy
|
||||
script:
|
||||
- echo "This is the deploy stage"
|
||||
```
|
||||
|
||||
`stages` 定义一组阶段,然后在每个工作描述中使用 `stage` 关键字指定其属于哪个阶段。`GitLab CI/CD`将会按照 `stages` 定义的**阶段顺序以及每个阶段内的作业并行度来执行作业**。
|
||||
|
||||
### 3.特殊指令
|
||||
|
||||
#### before_script
|
||||
|
||||
通常`before_script`在`gitlab-ci.yml` 文件的顶层定义,作为全局设置。这样定义的 `before_script` 会在每个作业(job)执行前都会运行。before_script 虽然有全局配置的偏好,但也可以根据需要在单独的作业中定义。
|
||||
|
||||
```shell
|
||||
# 在这个配置中,全局 before_script 会在 job1 和 job2 两个作业之前都执行一次。
|
||||
stages:
|
||||
- build
|
||||
|
||||
before_script:
|
||||
- echo "This is a global before_script."
|
||||
|
||||
job1:
|
||||
stage: build
|
||||
script: echo "This is job1."
|
||||
|
||||
job2:
|
||||
stage: build
|
||||
script: echo "This is job2."
|
||||
|
||||
```
|
||||
|
||||
也可以在具体的作业中定义 before_script,这样设置的 before_script 会只影响这个作业。
|
||||
|
||||
```shell
|
||||
# job1 的 before_script 被重写为 "echo "This is a job-specific before_script."",并且只在 job1 执行前运行。
|
||||
# 全局的 before_script 不会在 job1 之前执行,但会在 job2 之前执行。
|
||||
# 作业特定的 before_script 会覆盖全局的定义。
|
||||
stages:
|
||||
- build
|
||||
|
||||
before_script:
|
||||
- echo "This is a global before_script."
|
||||
|
||||
job1:
|
||||
stage: build
|
||||
before_script:
|
||||
- echo "This is a job-specific before_script."
|
||||
script: echo "This is job1."
|
||||
|
||||
job2:
|
||||
stage: build
|
||||
script: echo "This is job2."
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### after_script
|
||||
|
||||
after_script:它类似于 before_script,定义在这里的命令会在每个作业(job)的 script 部分执行完毕后运行。这常常用来在作业完成之后清理环境或存储日志等。
|
||||
|
||||
---
|
||||
|
||||
#### variables
|
||||
|
||||
可以定义一组环境变量,这些变量会在所有作业中可用。例如,你可能需要在多个作业中使用同一个数据库的链接地址。
|
||||
|
||||
```shell
|
||||
stages:
|
||||
- build
|
||||
variables:
|
||||
DATABASE_URL: "postgres://user:pass@example.com:5432/dbname"
|
||||
job1:
|
||||
stage: build
|
||||
script: echo "The database url is $DATABASE_URL."
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### stages
|
||||
|
||||
定义作业的执行阶段。GitLab CI/CD 会按照 `stages` 的顺序执行作业。
|
||||
|
||||
```shell
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
job1:
|
||||
stage: build
|
||||
script: echo "Build stage"
|
||||
job2:
|
||||
stage: test
|
||||
script: echo "Test stage"
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### rules and only/except
|
||||
|
||||
这两个指令都用于定义作业执行的条件。例如,你可以设置一个作业只在特定分支的提交时运行。
|
||||
|
||||
```shell
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
|
||||
build_job:
|
||||
stage: build
|
||||
script: echo "This is building stage."
|
||||
only:
|
||||
- master
|
||||
|
||||
test_job:
|
||||
stage: test
|
||||
script: echo "This is testing stage."
|
||||
except:
|
||||
- master
|
||||
|
||||
deploy_job:
|
||||
stage: deploy
|
||||
script: echo "This is deploying stage."
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "master"'
|
||||
when: always
|
||||
- if: '$CI_COMMIT_BRANCH != "master"'
|
||||
when: never
|
||||
|
||||
```
|
||||
|
||||
`build_job` 仅在主分支(`master`)上运行。相反,test_job会在所有分支上运行,除非是主分支。deploy_job 也仅在主分支上运行,使用了 `rules` 指令来实现这个条件,这是一个更复杂的条件判断,不同的规则 (if 语句)可以应对更为复杂的情况。
|
||||
|
||||
---
|
||||
|
||||
#### cache
|
||||
|
||||
允许你定义一个缓存,这个缓存可以在作业之间共享。这常常用于缓存依赖,以加快构建的速度。
|
||||
|
||||
```shell
|
||||
stages:
|
||||
- install
|
||||
- build
|
||||
|
||||
variables:
|
||||
BUNDLE_PATH: vendor/bundle
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- vendor/bundle
|
||||
|
||||
install:
|
||||
stage: install
|
||||
script:
|
||||
- bundle install --path vendor/bundle
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- bundle exec rake build
|
||||
```
|
||||
|
||||
在这个示例中,我们将 Ruby gems 安装到 vendor/bundle 目录下,然后在 cache 指令中声明这个路径来缓存这些 gems。
|
||||
|
||||
这样做的好处是,当在后续的作业或者后续的 pipeline 运行时,不需要重新下载和安装这些 gems,在此 .gitlab-ci.yml 文件的配置中,如果 cache 设置正确并且有效,然后在 vendor/bundle 路径下的gems没有发生变化(即 Gemfile 和 Gemfile.lock 文件没有发生改变),那么 bundle install --path vendor/bundle 命令就不会再次下载已经缓存的 gems。这是因为 Bundler(Ruby的依赖管理工具)会检查 gems 是否已经存在,如果已经存在并且版本匹配,那么就不会再次下载。
|
||||
|
||||
综上,对于重复的 install 作业,如果 Gemfile 和 Gemfile.lock 中的内容没有发生变化,那么即使在 pipeline 再次运行此作业,也不会再次下载已经缓存的 gems,从而可以加快构建的速度。可以大大减少构建的时间。
|
||||
|
||||
`install` 和 `build` 两个作业分别在 `install` 和 `build` 阶段运行。`install` 阶段会使用 `bundle install` 命令来下载和安装 gems,build 阶段则使用 `bundle exec` 来执行构建命令。
|
||||
通过这个配置,我们就可以在多个作业之间,以及多次 `pipeline` 运行之间共享这些 `gem` 的缓存,以此来加快构建的速度。
|
||||
|
||||
对于重复的 install 作业,在下次pipeline中会再次运行吗?
|
||||
如果 cache 设置正确并且有效,然后在 vendor/bundle 路径下的gems没有发生变化(即 Gemfile 和 Gemfile.lock 文件没有发生改变),那么 bundle install --path vendor/bundle 命令就不会再次下载已经缓存的 gems。这是因为 Bundler(Ruby的依赖管理工具)会检查 gems 是否已经存在,如果已经存在并且版本匹配,那么就不会再次下载。
|
||||
|
||||
综上,对于重复的 install 作业,如果 Gemfile 和 Gemfile.lock 中的内容没有发生变化,那么即使在 pipeline 再次运行此作业,也不会再次下载已经缓存的 gems,从而可以加快构建的速度。
|
||||
|
||||
---
|
||||
|
||||
#### artifacts
|
||||
|
||||
声明一些构建产物,这些产物将会在 `gitlab-ci.yml` 文件中其他作业或后续阶段的作业中可用,或者可供直接下载查看。
|
||||
|
||||
```shell
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- mkdir build
|
||||
- echo "Build artifacts" > build/artifacts.txt
|
||||
artifacts:
|
||||
paths:
|
||||
- build/
|
||||
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- cat build/artifacts.txt
|
||||
|
||||
```
|
||||
|
||||
在这个示例中,我们的 pipeline 分为两个阶段:build 和 test。在 build 阶段运行的 build 作业中,我们创建了一个 build 目录,并在其中生成了一个名为 artifacts.txt 的文件。
|
||||
|
||||
然后,我们使用 `artifacts` 指令声明了 `build/` 路径下的所有文件都是构建产物,GitLab CI/CD 将会在构建完成后收集这些产物。
|
||||
|
||||
在后续的 test 阶段的 test 作业中,我们可以直接访问到这个 artifacts.txt 文件。也就是说,通过 `artifacts` 允许我们在后续阶段的作业中使用到前一阶段的构建产物。
|
||||
|
||||
---
|
||||
|
||||
#### include
|
||||
|
||||
用于在当前 .gitlab-ci.yml 文件中引入其他的 CI/CD 配置文件,可以实现配置的模块化和共享。被引入的文件可以位于同一项目的其它位置,也可以位于其他项目,甚至可以从远程的 HTTP(S) URL 中引入。引入的文件将像是在主配置文件中一样被解析和执行,这对于大型项目或需要共享 CI/CD 配置的情况很有用。
|
||||
比如说,你有一个库 my-great-library。该库有自己的 .gitlab-ci.yml 文件,如下:
|
||||
|
||||
```shell
|
||||
variables:
|
||||
BUILD_DIR: build
|
||||
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- mkdir ${BUILD_DIR}
|
||||
- echo "Building the library" > ${BUILD_DIR}/result.txt
|
||||
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- echo "Testing the library"
|
||||
|
||||
```
|
||||
|
||||
而你在其他许多项目里都依赖这个库,并且需要对这个库进行构建和测试。这时,你可以在其他项目的 CI 标记 include,将这个库的 CI/CD 配置包含进来,例如:
|
||||
项目 project-1 的 .gitlab-ci.yml:
|
||||
|
||||
```shell
|
||||
include:
|
||||
- project: 'yourusername/my-great-library'
|
||||
file: '.gitlab-ci.yml'
|
||||
```
|
||||
|
||||
这样就可以实现在多个项目中共享一个统一的 CI/CD 配置,避免了每个项目都需要重复编写相同的配置,从而大大提高了效率。同时也有利于集中管理和修改这个共享的配置。
|
||||
|
||||
---
|
||||
|
||||
#### extends
|
||||
|
||||
用于复用已经定义的特定配置。在 GitLab CI/CD 配置中,我们可以定义一些通用的配置作为模板,例如设定重用的 `script` 块或者 `before_script` 块等,然后在需要的地方使用 `extends` 进行引用。不同于 `include` 关键词,`extends `并不会引入新的文件,而是仅仅在当前文件内部进行配置的重用。
|
||||
|
||||
```shell
|
||||
# 我们首先声明一个 '.base_job',这个定义包含了所有作业共有的部分
|
||||
.base_job:
|
||||
before_script:
|
||||
- echo "Setting up the job environment"
|
||||
after_script:
|
||||
- echo "Cleaning up after job"
|
||||
|
||||
# '.build_template' 扩展了 '.base_job',并添加了构建阶段特有的设定
|
||||
.build_template:
|
||||
extends: .base_job
|
||||
variables:
|
||||
BUILD_DIR: build
|
||||
script:
|
||||
- mkdir ${BUILD_DIR}
|
||||
- echo "Building the project" > ${BUILD_DIR}/output.txt
|
||||
stage: build
|
||||
|
||||
# '.test_template' 也扩展了 '.base_job',然后添加了测试阶段特有的设定
|
||||
.test_template:
|
||||
extends: .base_job
|
||||
script:
|
||||
- echo "Testing the project"
|
||||
stage: test
|
||||
|
||||
# 现在我们定义具体的构建和测试作业,它们分别扩展了 '.build_template' 和 '.test_template'
|
||||
job1:
|
||||
extends: .build_template
|
||||
variables:
|
||||
JOB_NAME: JOB1
|
||||
|
||||
job2:
|
||||
extends: .test_template
|
||||
variables:
|
||||
JOB_NAME: JOB2
|
||||
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
|
||||
```
|
||||
|
||||
通过 .base_job,我们为所有作业指定了公共的 before_script 和 after_script。然后,对于构建和测试阶段,我们又分别创建了扩展了 .base_job 的 .build_template 和 .test_template。最后,我们创建了两个具体的作业 job1 和 job2,它们扩展了各自的模板并添加了一些特定的配置。.base_job作为模板,.build_template和.test_template去继承它,如果二者都有相同的key,则使用子类的value覆盖父类,同理job1和job2。
|
||||
|
||||
---
|
||||
|
||||
#### tags
|
||||
|
||||
`tags`是用来选择执行该 `job` 的特定 `Runner`。
|
||||
|
||||
Runner 是 GitLab 提供的用于执行 CI/CD 任务的服务。每个 Runner 可以配置一组标签(tags),这样在定义 CI/CD 任务时,就可以通过设置相应的 tags 来选择对应的 Runner 来执行任务。
|
||||
|
||||
tags 中的 arm 指的是这个任务build_docker_arm必须由带有 arm 标签的 Runner 执行。这通常表示这个 Runner 是能够构建 ARM 架构 Docker 镜像的环境。如果没有带 arm 标签的 Runner,该任务会排队等待,直到有合适的 Runner 可用。所以这个 tags 配置是用来选择 Runner,而不是在 build 镜像时指定基础镜像。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -231,7 +231,7 @@ Vue3中生命周期API(选项式 VS 组合式)
|
|||
```html
|
||||
<script setup>
|
||||
// 通过 deineEmits “编译器宏函数” 生成 emit 方法
|
||||
const emit = deineEmits(['get-message'])
|
||||
const emit = defineEmits(['get-message'])
|
||||
const sendMsg = ()=>{
|
||||
emit('get-message','发送给父组件的数据')
|
||||
}
|
||||
|
|
@ -245,6 +245,8 @@ Vue3中生命周期API(选项式 VS 组合式)
|
|||
|
||||
#### 3.7 模版引用
|
||||
|
||||
##### 3.7.1 获取模版实例
|
||||
|
||||
通过`ref标识`获取真实的dom对象或者**组件实例对象**。
|
||||
|
||||
示例:
|
||||
|
|
@ -270,6 +272,40 @@ Vue3中生命周期API(选项式 VS 组合式)
|
|||
</template>
|
||||
```
|
||||
|
||||
**for循环**
|
||||
|
||||
```xml
|
||||
<div v-for="(item,index) in cacheComponents" :key="item.id" :ref="cacheComDivRef" tabindex="1"></div>
|
||||
```
|
||||
|
||||
```javascript
|
||||
const cacheComDivRefInstance = ref([]);
|
||||
const cacheComDivRef = (el)=>{
|
||||
if(el){
|
||||
cacheComDivRefInstance.value.push(el)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
当组件在for循环内部时:
|
||||
|
||||
```xml
|
||||
<div v-for="(item,index) in cacheComponents" :key="item.id" :ref="cacheComDivRef" tabindex="1">
|
||||
<component :is="item.cptKey" :ref="el=>cacheComRef(el,index)" />
|
||||
</div>
|
||||
```
|
||||
|
||||
```javascript
|
||||
let cacheComRefInstance = ref([]);
|
||||
const cacheComRef = (el,index)=>{
|
||||
if(el){
|
||||
cacheComRefInstance.value[index] = el
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
##### 3.7.2 暴露实例的方法
|
||||
|
||||
`defineExpose()`
|
||||
|
||||
默认情况下在`<script setup>`语法糖下组件内部的属性和方法是不开放给父组件访问的,可以通过defineExpose编译宏指定哪些属性和方法允许访问。
|
||||
|
|
@ -361,9 +397,45 @@ export default {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### 3.10 nextTick
|
||||
|
||||
在 Vue 3 中 nextTick() 方法的行为和 Vue 2 中基本相似,但它进行了一些优化,以提高性能和稳定性。nextTick() 通过利用微任务(microtask)来确保在 DOM 更新之后执行回调,从而避免在同一事件循环中执行 DOM 操作。简单的理解是,当数据更新了,在dom中渲染后,自动执行函数。
|
||||
|
||||
```javascript
|
||||
// 使用 nextTick() 方法
|
||||
import { ref, nextTick } from 'vue';
|
||||
|
||||
const myValue = ref('initial value');
|
||||
|
||||
// 在 DOM 更新后执行回调
|
||||
nextTick(() => {
|
||||
console.log('DOM 已更新');
|
||||
});
|
||||
```
|
||||
|
||||
在onMounted中使用
|
||||
|
||||
```javascript
|
||||
// 示例 2: 在 setup() 中使用 nextTick()
|
||||
import { ref, onMounted, nextTick } from 'vue';
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
const myValue = ref('initial value');
|
||||
|
||||
onMounted(() => {
|
||||
// 在 DOM 更新后执行回调
|
||||
nextTick(() => {
|
||||
console.log('DOM 已更新');
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
myValue,
|
||||
};
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -0,0 +1,18 @@
|
|||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIIC+DCCAeACAQAwgYgxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAw
|
||||
DgYDVQQHEwdCZWlqaW5nMQ8wDQYDVQQKEwZxY2xvdWQxDzANBgNVBAsTBnFjbG91
|
||||
ZDEVMBMGA1UEAxMMcWl1c2hpamllLmNuMRwwGgYDVQQFExM2MzA2Njg4NzYzNzgz
|
||||
MTgwMDg0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/ayERQM5qy1
|
||||
NDrjfg9n2hlAqdb2aUY/FYgwg670iVsjXnDlV0wo1xVkEEwE3nij58PHLTxaSID7
|
||||
+vUbbSAfiVsmw0gLd0waxVqjf64IhYFjpGpL2ohJE7B7ZATySgpN6eTpAGNEbSWu
|
||||
ZjvKIFk3SDf0FsADuSs9+0IZjA6qutqLNl7lR6pTGBt235RwHx3n1gzXMawgIUe+
|
||||
urwajBs7HtUG1ic38ML4EnvuU1DN3PJLZApPRtyfUtx7QPYcpJq6e5ybCzrVAoNg
|
||||
3d2ma2np+qXQTs4K4g9vkBnv9foiEt6CLlnk4gb9FaZZYajFQvr/95mKJraCpcdk
|
||||
8LhjYS1hcwIDAQABoCowKAYJKoZIhvcNAQkOMRswGTAXBgNVHREEEDAOggxxaXVz
|
||||
aGlqaWUuY24wDQYJKoZIhvcNAQELBQADggEBAJbN14nHfPl0auhX9+3+MRveQpSs
|
||||
gJqI+qe62RlOMbVVIRnO+8AbnxtKGefwCOU87d5qGXU4GUpXgkDRgahjh33FrKZF
|
||||
UIb+BTgwrW2iBxmsOz/SUBx0Z/mawfhijV383PJa9Mf8pxClsgACdgnu04fswoRK
|
||||
YVZx8JGFA5YHeMrjaSwb0i+55PLIFf3589bmXpnrBzmGFt2FGmieMsFROC1J0cqi
|
||||
6QNR5VhngW+HklMYR1rW+hGKOmBJL18q7rOtmURee9XaHzqxLZWLG/z8P2Ia78Rj
|
||||
dLgApDCSsQ6eMH/AvWSLa5hvG5O1X8pRN6afcFFHH0kwLBAHubCn4BTz++s=
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAv/ayERQM5qy1NDrjfg9n2hlAqdb2aUY/FYgwg670iVsjXnDl
|
||||
V0wo1xVkEEwE3nij58PHLTxaSID7+vUbbSAfiVsmw0gLd0waxVqjf64IhYFjpGpL
|
||||
2ohJE7B7ZATySgpN6eTpAGNEbSWuZjvKIFk3SDf0FsADuSs9+0IZjA6qutqLNl7l
|
||||
R6pTGBt235RwHx3n1gzXMawgIUe+urwajBs7HtUG1ic38ML4EnvuU1DN3PJLZApP
|
||||
RtyfUtx7QPYcpJq6e5ybCzrVAoNg3d2ma2np+qXQTs4K4g9vkBnv9foiEt6CLlnk
|
||||
4gb9FaZZYajFQvr/95mKJraCpcdk8LhjYS1hcwIDAQABAoIBAHCqGVhsrCW2t6Mv
|
||||
7NTPteQLbihAQd8Hm37Hr7GZvWvgUaHcIL5btJyHsXLfKvxnUct03DFweoyTJ1Dj
|
||||
CnXBpMC4/sceQZyCzjOGPu9w9Q9mIVUeDeb0le84ZTMOtCVAZvofn6Daog5tTy4x
|
||||
aTATLJ72OAwiJg1Hk9kjslrBQPLozQQUmSXQwfSG3XCYRafb+jZAaUEjG5wlYPwH
|
||||
R9ZQZHiEPbd5Y5MqkTlt3krgixW/+rqUCJOS7QJGi4lo2dJi019/gbcbVpnz/Doe
|
||||
HSnvgwkySPp5UkR22kM8wwkAwRsERD2V8TMkFqAZ9DLasHRfMAhp9GuZ9UqvYS+l
|
||||
oYTvoAECgYEA4qsOjPyg9+F99Sa/gYF0NVDB3LXMNRldtQjZ22CEDRE6IgzF0Gv+
|
||||
FNzKMw5RxMdew29DWJ+nYQ+r+RR5MQ9//NLf1q3PpOsLtrvHtcB6tS0Bn53Cf+hg
|
||||
HOpmZ3+QH/wfA5b8i+3310w85OXF4ySahebL63oJfccBIHPb93//BbMCgYEA2M33
|
||||
IBqf4VrDTBu44kMi3kXccircUbEDMDwNPh8TmA6cqZtvtPWNsmk9tqHc0BIYUeVY
|
||||
MZj35szbOaeqsGf5sN1uK4JImBiswvUvV7IXX3KOxXqB38Fl2pEaJZorU0MDA3o5
|
||||
roKc7RtMWtdeLPyfRq/wJLUZa0gq7WLVEN4V1UECgYEAg3O+eYcc9wSfnqe9Eib4
|
||||
NN9DvnL0Has7S/z5Ex+zFTzzYMHVipzGemTdIqTgSOVykJabEO9uC30iN85mxkv9
|
||||
5qqIw6CDNlpVrcDS/hXFVALo2R+Np84kx0As6ULyW4pEljle9uun+wUsn3adv6//
|
||||
qT4C7uoUTQw3HBH09GEXjb8CgYAVuXXE4sYYh8bADpsVGRMaYLe5PPA8w1cFc08E
|
||||
ZYrKFtS97hRgdqaPNRp4/Xkp5FZJhoiy15gnqWliOpnQ+Wo8vcN3WqO5kedl1bm7
|
||||
uN28s7b4tNDkwfVZ1GZhVDR5MGLR62JySSY+YBjjlWcbbOjs5V5T302/wUiD5v5g
|
||||
pVBcwQKBgFmo5pq0oyUNaN8ffzOFA187qBmgc/VGFPvILJAMoeEt1UvzbM2aNrnN
|
||||
gmyuo5bOnrOGgURYt+8AenHmWP0i2xlvvakjeMolI0V/VMswNGi+ukG4+GkzUAAK
|
||||
71svqaGAY3et34TZobQk2oIKGmOKhCdttjqLm+ctqjd6KznAdm8G
|
||||
-----END RSA PRIVATE KEY-----
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIG5zCCBM+gAwIBAgIQDrROEKRRpDBP60fUHLa0NTANBgkqhkiG9w0BAQsFADBb
|
||||
MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg
|
||||
SW5jLjElMCMGA1UEAxMcVHJ1c3RBc2lhIERWIFRMUyBSU0EgQ0EgMjAyNTAeFw0y
|
||||
NTA1MzAwMDAwMDBaFw0yNTA4MjcyMzU5NTlaMBcxFTATBgNVBAMTDHFpdXNoaWpp
|
||||
ZS5jbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/2shEUDOastTQ6
|
||||
434PZ9oZQKnW9mlGPxWIMIOu9IlbI15w5VdMKNcVZBBMBN54o+fDxy08WkiA+/r1
|
||||
G20gH4lbJsNIC3dMGsVao3+uCIWBY6RqS9qISROwe2QE8koKTenk6QBjRG0lrmY7
|
||||
yiBZN0g39BbAA7krPftCGYwOqrraizZe5UeqUxgbdt+UcB8d59YM1zGsICFHvrq8
|
||||
GowbOx7VBtYnN/DC+BJ77lNQzdzyS2QKT0bcn1Lce0D2HKSaunucmws61QKDYN3d
|
||||
pmtp6fql0E7OCuIPb5AZ7/X6IhLegi5Z5OIG/RWmWWGoxUL6//eZiia2gqXHZPC4
|
||||
Y2EtYXMCAwEAAaOCAukwggLlMB8GA1UdIwQYMBaAFLQSKKW0wB2fKXFpPNkRlkp1
|
||||
aVDAMB0GA1UdDgQWBBQrpBhTUR1h8xYSRHPBA/KJth/uIjApBgNVHREEIjAgggxx
|
||||
aXVzaGlqaWUuY26CEHd3dy5xaXVzaGlqaWUuY24wPgYDVR0gBDcwNTAzBgZngQwB
|
||||
AgEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4G
|
||||
A1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIweQYI
|
||||
KwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j
|
||||
b20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9UcnVz
|
||||
dEFzaWFEVlRMU1JTQUNBMjAyNS5jcnQwDAYDVR0TAQH/BAIwADCCAX4GCisGAQQB
|
||||
1nkCBAIEggFuBIIBagFoAHYAEvFONL1TckyEBhnDjz96E/jntWKHiJxtMAWE6+WG
|
||||
JjoAAAGXH/X/RgAABAMARzBFAiBsvctcgmzHGSNQ3r48CXq36XnU0+t0X5OkrEV2
|
||||
8KL0uAIhAL13hijXLJh1v9R+EpMxfQI8htk1utgbapEhkySv/l6jAHYAzPsPaoVx
|
||||
CWX+lZtTzumyfCLphVwNl422qX5UwP5MDbAAAAGXH/X/XQAABAMARzBFAiEAsp8m
|
||||
rFEEouJtiSFz6n0tMDeKPznIwEj2eCUghKhD0lUCICM0+Uf0yNaGOfsmqWzpW7Jc
|
||||
KMpKg6dcVv0ywF1dc2gLAHYA3dzKNJXX4RYF55Uy+sef+D0cUN/bADoUEnYKLKy7
|
||||
yCoAAAGXH/X/kwAABAMARzBFAiAdSwFSs2z1PLFm81bkOpqWBugLUUK7DAEHYkIi
|
||||
dieYDwIhAKjfupjucVFEq69MOesXNCN9JGHptcagxS3kqgqpGjYJMA0GCSqGSIb3
|
||||
DQEBCwUAA4ICAQDGDE4TDN546VXaILG1VbbLLANhk6PhXm6nw9JyVKo6ajM5UWZ9
|
||||
eTQhJYOgg3OKxMmuH0lmP0klSs9r5K9p7yzB7v0cLYCld103IpXrd+eziisPVguH
|
||||
4DvETMyVGvL5kLSH3tshTpLf1PXQp1ruA3SzIpB58HsVIcST5ALmhuhgC/JMCdem
|
||||
3gXpIXXUrKO3hfS1KiHc7ECnpO8J7XurFo7W/RWOrqxFb3qpp1gUK86rqTeIsXzW
|
||||
hchaBAgz0aJf2zm22+R9uPIVHBKK3zMKJmMERKdvyiWD4bSBKs/ya6mBBAJjSdf4
|
||||
QVZMn+9q5DfU3bAaW8Pdafmb1ec4m2AxQS6y2t7WS1svJDuCg5RthhS2eD/jEXe1
|
||||
GWTy6XDq4XD1tLcqOytYpeBy9+8O7EE8klWgzFzKcIXCgVZAdCeXcu1e9mSmSBuN
|
||||
pcyez/cZBNzPvet54lAX1QrU1SysB2yvjHgtXRvvX/UNz3dXbLlM01ayK8nRrKk3
|
||||
H+OGUwojuGpa2IId6gxLE5ZCFWGN119phHKzF/7D7MIxpnvPQW/yNahC/GCXhdi8
|
||||
iLGL0w870lq8aSudBfc+O3qsq4wuT/QBJgdvWMVtgKIkV7xkmgksIjdSwXsNTQdz
|
||||
rGtUrfZO/k/RTf75EndqAzEARxZDw2DgEbkrB/9Nb9ZjeRkbhfF9/GwQyg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFnjCCBIagAwIBAgIQCSYyO0lk42hGFRLe8aXVLDANBgkqhkiG9w0BAQsFADBh
|
||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||||
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
||||
MjAeFw0yNTAxMDgwMDAwMDBaFw0zNTAxMDcyMzU5NTlaMFsxCzAJBgNVBAYTAkNO
|
||||
MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSUwIwYDVQQD
|
||||
ExxUcnVzdEFzaWEgRFYgVExTIFJTQSBDQSAyMDI1MIICIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAg8AMIICCgKCAgEA0fuEmuBIsN6ZZVq+gRobMorOGIilTCIfQrxNpR8FUZ9R
|
||||
/GfbiekbiIKphQXEZ7N1uBnn6tXUuZ32zl6jPkZpHzN/Bmgk1BWSIzVc0npMzrWq
|
||||
/hrbk5+KddXJdsNpeG1+Q8lc8uVMBrztnxaPb7Rh7yQCsMrcO4hgVaqLJWkVvEfW
|
||||
ULtoCHQnNaj4IroG6VxQf1oArQ8bPbwpI02lieSahRa78FQuXdoGVeQcrkhtVjZs
|
||||
ON98vq5fPWZX2LFv7e5J6P9IHbzvOl8yyQjv+2/IOwhNSkaXX3bI+//bqF9XW/p7
|
||||
+gsUmHiK5YsvLjmXcvDmoDEGrXMzgX31Zl2nJ+umpRbLjwP8rxYIUsKoEwEdFoto
|
||||
Aid59UEBJyw/GibwXQ5xTyKD/N6C8SFkr1+myOo4oe1UB+YgvRu6qSxIABo5kYdX
|
||||
FodLP4IgoVJdeUFs1Usa6bxYEO6EgMf5lCWt9hGZszvXYZwvyZGq3ogNXM7eKyi2
|
||||
20WzJXYMmi9TYFq2Fa95aZe4wki6YhDhhOO1g0sjITGVaB73G+JOCI9yJhv6+REN
|
||||
D40ZpboUHE8JNgMVWbG1isAMVCXqiADgXtuC+tmJWPEH9cR6OuJLEpwOzPfgAbnn
|
||||
2MRu7Tsdr8jPjTPbD0FxblX1ydW3RG30vwLF5lkTTRkHG9epMgpPMdYP7nY/08MC
|
||||
AwEAAaOCAVYwggFSMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLQSKKW0
|
||||
wB2fKXFpPNkRlkp1aVDAMB8GA1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485
|
||||
MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
|
||||
dgYIKwYBBQUHAQEEajBoMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
|
||||
dC5jb20wQAYIKwYBBQUHMAKGNGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
|
||||
aWdpQ2VydEdsb2JhbFJvb3RHMi5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
|
||||
L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDARBgNV
|
||||
HSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQELBQADggEBAJ4a3svh316GY2+Z7EYx
|
||||
mBIsOwjJSnyoEfzx2T699ctLLrvuzS79Mg3pPjxSLlUgyM8UzrFc5tgVU3dZ1sFQ
|
||||
I4RM+ysJdvIAX/7Yx1QbooVdKhkdi9X7QN7yVkjqwM3fY3WfQkRTzhIkM7mYIQbR
|
||||
r+y2Vkju61BLqh7OCRpPMiudjEpP1kEtRyGs2g0aQpEIqKBzxgitCXSayO1hoO6/
|
||||
71ts801OzYlqYW9OQQQ2GCJyFbD6XHDjdpn+bWUxTKWaMY0qedSCbHE3Kl2QEF0C
|
||||
ynZ7SbC03yR+gKZQDeTXrNP1kk5Qhe7jSXgw+nhbspe0q/M1ZcNCz+sPxeOwdCcC
|
||||
gJE=
|
||||
-----END CERTIFICATE-----
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIG5zCCBM+gAwIBAgIQDrROEKRRpDBP60fUHLa0NTANBgkqhkiG9w0BAQsFADBb
|
||||
MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg
|
||||
SW5jLjElMCMGA1UEAxMcVHJ1c3RBc2lhIERWIFRMUyBSU0EgQ0EgMjAyNTAeFw0y
|
||||
NTA1MzAwMDAwMDBaFw0yNTA4MjcyMzU5NTlaMBcxFTATBgNVBAMTDHFpdXNoaWpp
|
||||
ZS5jbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/2shEUDOastTQ6
|
||||
434PZ9oZQKnW9mlGPxWIMIOu9IlbI15w5VdMKNcVZBBMBN54o+fDxy08WkiA+/r1
|
||||
G20gH4lbJsNIC3dMGsVao3+uCIWBY6RqS9qISROwe2QE8koKTenk6QBjRG0lrmY7
|
||||
yiBZN0g39BbAA7krPftCGYwOqrraizZe5UeqUxgbdt+UcB8d59YM1zGsICFHvrq8
|
||||
GowbOx7VBtYnN/DC+BJ77lNQzdzyS2QKT0bcn1Lce0D2HKSaunucmws61QKDYN3d
|
||||
pmtp6fql0E7OCuIPb5AZ7/X6IhLegi5Z5OIG/RWmWWGoxUL6//eZiia2gqXHZPC4
|
||||
Y2EtYXMCAwEAAaOCAukwggLlMB8GA1UdIwQYMBaAFLQSKKW0wB2fKXFpPNkRlkp1
|
||||
aVDAMB0GA1UdDgQWBBQrpBhTUR1h8xYSRHPBA/KJth/uIjApBgNVHREEIjAgggxx
|
||||
aXVzaGlqaWUuY26CEHd3dy5xaXVzaGlqaWUuY24wPgYDVR0gBDcwNTAzBgZngQwB
|
||||
AgEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4G
|
||||
A1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIweQYI
|
||||
KwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j
|
||||
b20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9UcnVz
|
||||
dEFzaWFEVlRMU1JTQUNBMjAyNS5jcnQwDAYDVR0TAQH/BAIwADCCAX4GCisGAQQB
|
||||
1nkCBAIEggFuBIIBagFoAHYAEvFONL1TckyEBhnDjz96E/jntWKHiJxtMAWE6+WG
|
||||
JjoAAAGXH/X/RgAABAMARzBFAiBsvctcgmzHGSNQ3r48CXq36XnU0+t0X5OkrEV2
|
||||
8KL0uAIhAL13hijXLJh1v9R+EpMxfQI8htk1utgbapEhkySv/l6jAHYAzPsPaoVx
|
||||
CWX+lZtTzumyfCLphVwNl422qX5UwP5MDbAAAAGXH/X/XQAABAMARzBFAiEAsp8m
|
||||
rFEEouJtiSFz6n0tMDeKPznIwEj2eCUghKhD0lUCICM0+Uf0yNaGOfsmqWzpW7Jc
|
||||
KMpKg6dcVv0ywF1dc2gLAHYA3dzKNJXX4RYF55Uy+sef+D0cUN/bADoUEnYKLKy7
|
||||
yCoAAAGXH/X/kwAABAMARzBFAiAdSwFSs2z1PLFm81bkOpqWBugLUUK7DAEHYkIi
|
||||
dieYDwIhAKjfupjucVFEq69MOesXNCN9JGHptcagxS3kqgqpGjYJMA0GCSqGSIb3
|
||||
DQEBCwUAA4ICAQDGDE4TDN546VXaILG1VbbLLANhk6PhXm6nw9JyVKo6ajM5UWZ9
|
||||
eTQhJYOgg3OKxMmuH0lmP0klSs9r5K9p7yzB7v0cLYCld103IpXrd+eziisPVguH
|
||||
4DvETMyVGvL5kLSH3tshTpLf1PXQp1ruA3SzIpB58HsVIcST5ALmhuhgC/JMCdem
|
||||
3gXpIXXUrKO3hfS1KiHc7ECnpO8J7XurFo7W/RWOrqxFb3qpp1gUK86rqTeIsXzW
|
||||
hchaBAgz0aJf2zm22+R9uPIVHBKK3zMKJmMERKdvyiWD4bSBKs/ya6mBBAJjSdf4
|
||||
QVZMn+9q5DfU3bAaW8Pdafmb1ec4m2AxQS6y2t7WS1svJDuCg5RthhS2eD/jEXe1
|
||||
GWTy6XDq4XD1tLcqOytYpeBy9+8O7EE8klWgzFzKcIXCgVZAdCeXcu1e9mSmSBuN
|
||||
pcyez/cZBNzPvet54lAX1QrU1SysB2yvjHgtXRvvX/UNz3dXbLlM01ayK8nRrKk3
|
||||
H+OGUwojuGpa2IId6gxLE5ZCFWGN119phHKzF/7D7MIxpnvPQW/yNahC/GCXhdi8
|
||||
iLGL0w870lq8aSudBfc+O3qsq4wuT/QBJgdvWMVtgKIkV7xkmgksIjdSwXsNTQdz
|
||||
rGtUrfZO/k/RTf75EndqAzEARxZDw2DgEbkrB/9Nb9ZjeRkbhfF9/GwQyg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFnjCCBIagAwIBAgIQCSYyO0lk42hGFRLe8aXVLDANBgkqhkiG9w0BAQsFADBh
|
||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||||
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
||||
MjAeFw0yNTAxMDgwMDAwMDBaFw0zNTAxMDcyMzU5NTlaMFsxCzAJBgNVBAYTAkNO
|
||||
MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSUwIwYDVQQD
|
||||
ExxUcnVzdEFzaWEgRFYgVExTIFJTQSBDQSAyMDI1MIICIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAg8AMIICCgKCAgEA0fuEmuBIsN6ZZVq+gRobMorOGIilTCIfQrxNpR8FUZ9R
|
||||
/GfbiekbiIKphQXEZ7N1uBnn6tXUuZ32zl6jPkZpHzN/Bmgk1BWSIzVc0npMzrWq
|
||||
/hrbk5+KddXJdsNpeG1+Q8lc8uVMBrztnxaPb7Rh7yQCsMrcO4hgVaqLJWkVvEfW
|
||||
ULtoCHQnNaj4IroG6VxQf1oArQ8bPbwpI02lieSahRa78FQuXdoGVeQcrkhtVjZs
|
||||
ON98vq5fPWZX2LFv7e5J6P9IHbzvOl8yyQjv+2/IOwhNSkaXX3bI+//bqF9XW/p7
|
||||
+gsUmHiK5YsvLjmXcvDmoDEGrXMzgX31Zl2nJ+umpRbLjwP8rxYIUsKoEwEdFoto
|
||||
Aid59UEBJyw/GibwXQ5xTyKD/N6C8SFkr1+myOo4oe1UB+YgvRu6qSxIABo5kYdX
|
||||
FodLP4IgoVJdeUFs1Usa6bxYEO6EgMf5lCWt9hGZszvXYZwvyZGq3ogNXM7eKyi2
|
||||
20WzJXYMmi9TYFq2Fa95aZe4wki6YhDhhOO1g0sjITGVaB73G+JOCI9yJhv6+REN
|
||||
D40ZpboUHE8JNgMVWbG1isAMVCXqiADgXtuC+tmJWPEH9cR6OuJLEpwOzPfgAbnn
|
||||
2MRu7Tsdr8jPjTPbD0FxblX1ydW3RG30vwLF5lkTTRkHG9epMgpPMdYP7nY/08MC
|
||||
AwEAAaOCAVYwggFSMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLQSKKW0
|
||||
wB2fKXFpPNkRlkp1aVDAMB8GA1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485
|
||||
MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
|
||||
dgYIKwYBBQUHAQEEajBoMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
|
||||
dC5jb20wQAYIKwYBBQUHMAKGNGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
|
||||
aWdpQ2VydEdsb2JhbFJvb3RHMi5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
|
||||
L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDARBgNV
|
||||
HSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQELBQADggEBAJ4a3svh316GY2+Z7EYx
|
||||
mBIsOwjJSnyoEfzx2T699ctLLrvuzS79Mg3pPjxSLlUgyM8UzrFc5tgVU3dZ1sFQ
|
||||
I4RM+ysJdvIAX/7Yx1QbooVdKhkdi9X7QN7yVkjqwM3fY3WfQkRTzhIkM7mYIQbR
|
||||
r+y2Vkju61BLqh7OCRpPMiudjEpP1kEtRyGs2g0aQpEIqKBzxgitCXSayO1hoO6/
|
||||
71ts801OzYlqYW9OQQQ2GCJyFbD6XHDjdpn+bWUxTKWaMY0qedSCbHE3Kl2QEF0C
|
||||
ynZ7SbC03yR+gKZQDeTXrNP1kk5Qhe7jSXgw+nhbspe0q/M1ZcNCz+sPxeOwdCcC
|
||||
gJE=
|
||||
-----END CERTIFICATE-----
|
||||
Loading…
Reference in New Issue