我创建了一个简单的 Cloud Deploy 配置来部署网络、InstanceTemplate 和 InstanceGroupManager(见下文)。
部署已成功创建。
然后,我尝试通过重命名 InstanceTemplate 资源用新版本替换 InstanceTemplate 资源。
在更新过程中,Google Deploy Manager 抱怨循环引用错误。但据我所知,没有出现此错误。
如何更新 InstanceTemplate 资源而不出现管理器错误?
以下是初始模板和更新错误。
初始模板
resources:
- name: t2-vpc-network
type: gcp-types/compute-v1:networks
properties:
name: t2-vpc-network
routingConfig:
routingMode: REGIONAL
autoCreateSubnetworks: false
- name: t2-vpc-subnetwork-europe-west1
type: gcp-types/compute-v1:subnetworks
properties:
name: t2-vpc-subnetwork
network: $(ref.t2-vpc-network.selfLink)
region: europe-west1
ipCidrRange: 10.10.10.0/24
- name: t2-esp-hc
type: gcp-types/compute-v1:healthChecks
properties:
type: HTTP
checkIntervalSec: 10
timeoutSec: 5
unhealthyThreshold: 3
healthyThreshold: 2
httpHealthCheck:
port: 8080
requestPath: /endpoints_status
- type: gcp-types/compute-v1:instanceTemplates
name: t2-esp-instance-template-europe-west1-1
properties:
properties:
machineType: f1-micro
disks:
- deviceName: boot
boot: true
type: PERSISTENT
autoDelete: true
mode: READ_WRITE
initializeParams:
sourceImage: projects/gce-uefi-images/global/images/cos-stable-80-12739-91-0
networkInterfaces:
- network: $(ref.t2-vpc-network.selfLink)
subnetwork: $(ref.t2-vpc-subnetwork-europe-west1.selfLink)
- type: gcp-types/compute-v1:regionAutoscalers
name: t2-esp-group-autoscaler-europe-west1
properties:
region: europe-west1
target: $(ref.t2-esp-group-europe-west1.selfLink)
autoscalingPolicy:
coolDownPeriodSec: 120
cpuUtilization:
utilizationTarget: 0.8
minNumReplicas: 1
maxNumReplicas: 5
- type: gcp-types/compute-v1:regionInstanceGroupManagers
name: t2-esp-group-europe-west1
properties:
region: europe-west1
targetSize: 1
baseInstanceName: t2-esp-instance
instanceTemplate: $(ref.t2-esp-instance-template-europe-west1-1.selfLink)
updatePolicy:
minimalAction: 'REPLACE'
type: 'PROACTIVE'
namedPorts:
- name: http
port: 80
- name: https
port: 443
autoHealingPolicies:
- healthCheck: $(ref.t2-esp-hc.selfLink)
initialDelaySec: 120
actionType: RECREATE
已更改模板
实例模板的名称不同(删除旧模板并创建新模板)。这是这里唯一的变化。
resources:
- name: t2-vpc-network
type: gcp-types/compute-v1:networks
properties:
name: t2-vpc-network
routingConfig:
routingMode: REGIONAL
autoCreateSubnetworks: false
- name: t2-vpc-subnetwork-europe-west1
type: gcp-types/compute-v1:subnetworks
properties:
name: t2-vpc-subnetwork
network: $(ref.t2-vpc-network.selfLink)
region: europe-west1
ipCidrRange: 10.10.10.0/24
- name: t2-esp-hc
type: gcp-types/compute-v1:healthChecks
properties:
type: HTTP
checkIntervalSec: 10
timeoutSec: 5
unhealthyThreshold: 3
healthyThreshold: 2
httpHealthCheck:
port: 8080
requestPath: /endpoints_status
- type: gcp-types/compute-v1:instanceTemplates
name: t2-esp-instance-template-europe-west1-2
properties:
properties:
machineType: f1-micro
disks:
- deviceName: boot
boot: true
type: PERSISTENT
autoDelete: true
mode: READ_WRITE
initializeParams:
sourceImage: projects/gce-uefi-images/global/images/cos-stable-80-12739-91-0
networkInterfaces:
- network: $(ref.t2-vpc-network.selfLink)
subnetwork: $(ref.t2-vpc-subnetwork-europe-west1.selfLink)
- type: gcp-types/compute-v1:regionAutoscalers
name: t2-esp-group-autoscaler-europe-west1
properties:
region: europe-west1
target: $(ref.t2-esp-group-europe-west1.selfLink)
autoscalingPolicy:
coolDownPeriodSec: 120
cpuUtilization:
utilizationTarget: 0.8
minNumReplicas: 1
maxNumReplicas: 5
- type: gcp-types/compute-v1:regionInstanceGroupManagers
name: t2-esp-group-europe-west1
properties:
region: europe-west1
targetSize: 1
baseInstanceName: t2-esp-instance
instanceTemplate: $(ref.t2-esp-instance-template-europe-west1-2.selfLink)
updatePolicy:
minimalAction: 'REPLACE'
type: 'PROACTIVE'
namedPorts:
- name: http
port: 80
- name: https
port: 443
autoHealingPolicies:
- healthCheck: $(ref.t2-esp-hc.selfLink)
initialDelaySec: 120
actionType: RECREATE
错误
code: CYCLIC_REFERENCES
message: |
A cycle was found during reference analysis:
Detected cycle:
t2-vpc-subnetwork-europe-west1 <- t2-esp-instance-template-europe-west1-1 <- t2-esp-group-europe-west1 <- t2-esp-instance-template-europe-west1-2
答案1
使用 CI/CD 自动化环境时,第一步是将部署配置文件存储在版本控制系统中。然后,您可以按照 Google 的说明执行更新文档。
对于您所做的版本更新,CI/CD 自动化环境,您需要使用版本控制系统,例如 Git(最流行)、Subversion 和 Mercurial。版本控制系统是众多系统之一好处将允许您:
- 恢复到先前已知的良好配置,
- 提供变更的审计跟踪,
- 将配置作为持续部署系统的一部分,
版本控制提供了一种逻辑方法来组织文件并协调其创建、控制访问、更新以及跨团队和组织删除。
自动化和持续集成依赖于这些文件来获取自动化本身的源代码,以及要自动化的配置和要分发的数据。
当您更改配置文件时,VCS 将告知更改的内容和更改的位置,以及显示版本的不兼容性等。
答案2
错误消息是依赖循环(代码:CYCLIC_REFERENCES)。它表示你的配置存在依赖循环例如,如果资源 A 依赖于资源 B,B 依赖于 C,C 依赖于 A。
您可以看到 Deploy 配置中的循环如下:t2-vpc-subnetwork-europe-west1 <- t2-esp-instance-template-europe-west1-1 <- t2-esp-group-europe-west1 <- t2-esp-instance-template-europe-west1-2
要解决该错误,请更改引用以打破循环。