Home gocd 入门
Post
Cancel

gocd 入门

GoCD介绍

GoCD 是一个开源的持续集成和持续交付系统,可以在持续交付过程中执行编译、自动化测试、自动部署等等。

GoCD 的基础框架由 Server 和 Agent 组成:

  • Server 负责控制一切(配置),轮询材料(如代码仓库)的变化,检测到材料变化需要触发 Pipeline 时,将 Job 分配给 Agent 去执行
  • Agent 接收 Server 分配的 Job,执行 Job 下的 Task(运行命令、部署等),并将 Job 的状态抱报告给 Server,由 Server 整理信息判断该 Job 所处 Stage 的状态

安装GoCD

1
2
3
helm repo add gocd https://gocd.github.io/helm-chart
helm repo update
helm install gocd gocd/gocd --namespace gocd --create-namespace

安装完成后,通过 http://127.0.0.1:30380/ 访问到 gocd,如图,

这个是 Service 开放 NodePort 访问,不是今天的重点,我们希望通过 ingress 可以访问,但是通过上述 helm 安装的 ingress 没有关联 ingressClass,是无法访问的,通过 kubectl get ingress -n gocd 可以看到 address 是空的

这个时候需要通过以下的方式进行安装 ingressClassingressController, 要注意但是 namespace 需要跟 gocd 同一个,我们这里选用的是 nginx-ingress 不同的云厂商会使用不同的 ingressClassingressController

1
2
3
helm repo add nginx-stable https://helm.nginx.com/stable
helm repo update
helm install my-release nginx-stable/nginx-ingress -n gocd

安装完 ingressClassingressController 后,需要修改原来的 ingress 配置(当然不使用 helm,直接执行一下 yaml 也是可以的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
kind: IngressClass
apiVersion: networking.k8s.io/v1
metadata:
  name: nginx
  labels:
    app.kubernetes.io/managed-by: Helm
  annotations:
    meta.helm.sh/release-name: my-release
    meta.helm.sh/release-namespace: gocd
  managedFields:
    - manager: helm
      operation: Update
      apiVersion: networking.k8s.io/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            .: {}
            f:meta.helm.sh/release-name: {}
            f:meta.helm.sh/release-namespace: {}
          f:labels:
            .: {}
            f:app.kubernetes.io/managed-by: {}
        f:spec:
          f:controller: {}
spec:
  controller: nginx.org/ingress-controller
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: gocd-server
  namespace: gocd
  kubernetes.io/ingress.class: nginx #修改1
  labels:
    app: gocd
    app.kubernetes.io/managed-by: Helm
    chart: gocd-1.42.1
    component: server
    heritage: Helm
    release: gocd
  annotations:
    meta.helm.sh/release-name: gocd
    meta.helm.sh/release-namespace: gocd
  managedFields:
    - manager: helm
      operation: Update
      apiVersion: networking.k8s.io/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:spec:
          f:defaultBackend:
            .: {}
            f:service:
              .: {}
              f:name: {}
              f:port:
                .: {}
                f:number: {}
    - manager: dashboard
      operation: Update
      apiVersion: networking.k8s.io/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            .: {}
            f:meta.helm.sh/release-name: {}
            f:meta.helm.sh/release-namespace: {}
          f:labels:
            .: {}
            f:app: {}
            f:app.kubernetes.io/managed-by: {}
            f:chart: {}
            f:component: {}
            f:heritage: {}
            f:release: {}
        f:spec:
          f:ingressClassName: {}
          f:rules: {}
spec:
  ingressClassName: nginx  #修改2
  rules:
    - host: localhost #修改3
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: gocd-server
                port:
                  number: 8153
status:
  loadBalancer: {}

然后执行 kubectl apply -f <spec.yaml> 进行生效,执行kubectl get ingress -n gocd 如果看到 addresslocalhost,说明 ingress 关联 nginx 成功

我们通过 http://localhost 可以访问的 gocd

还有一点需要注意,gocd-agent 默认是没开启的,需要将 deloyment spec replica 改为 大于 1,镜像需要根据编译的语言类型进行定制

参考文献

weixin.png

公众号名称:怪味Coding
微信扫码关注或搜索公众号名称
This post is licensed under CC BY 4.0 by the author.