argocd+gitlab应用自动发布
# gitlab仓库配置
推荐gitlab创建空仓库后,拉取到本地编辑好以后再提交,不要直接编辑gitlab的yaml文件,因为gitlab在线编辑时,换行与tab空格在argocd上可能存在识别失败,不是标准的yaml文件,无法创建应用。
创建一个最简单的仓库,仅包含应用的yaml文件,文件内容如下
[root@localhost argo]# tree argo-demo
argo-demo
├── README.md
└── manifests
├── cms.yaml
├── deployment.yaml
└── svc.yaml
[root@localhost argo]# cat argo-demo/manifests/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-deployment
labels:
app: php-app
spec:
replicas: 3
selector:
matchLabels:
app: php-app
template:
metadata:
labels:
app: php-app
spec:
containers:
- name: php
image: docker.cnb.cool/zzppjj/docker-images/php_k8s:v6
ports:
- containerPort: 80
volumeMounts:
- name: app-config
mountPath: /app/config/database.php
subPath: database.php
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
volumes:
- name: app-config
configMap:
name: app-config-files
items:
- key: database.php
path: database.php
[root@localhost argo]# cat argo-demo/manifests/cms.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-files
data:
database.php: |
<?php
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '192.168.51.51',
// 数据库名
'database' => 'vmq_new',
// 用户名
'username' => 'root',
// 密码
'password' => '2023W#@qGhsd',
// 端口
'hostport' => '13306',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 自动读取主库数据
'read_master' => false,
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
// Builder类
'builder' => '',
// Query类
'query' => '\\think\\db\\Query',
// 是否需要断线重连
'break_reconnect' => false,
// 断线标识字符串
'break_match_str' => [],
];
[root@localhost argo]# cat argo-demo/manifests/svc.yaml
apiVersion: v1
kind: Service
metadata:
name: php-service
spec:
selector:
app: php-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
gitlab仓库内容如下:

# argocd配置
# 添加仓库地址
添加仓库地址,Settings → Repositories,点击 Connect Repo using HTTPS 按钮:

填写以下信息

验证通过后显示如下,点击创建应用

# 创建应用
填写以下内容


创建完后如下所示:

# 访问验证
# 验证应用部署状态
查看k8s创建的资源信息,发现已经成功创建了对应的资源
[root@k8s-master test-git]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-68c8648d6d-54brv 1/1 Running 0 62s
[root@k8s-master test-git]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp ClusterIP 10.97.189.71 <none> 80/TCP 70s
[root@k8s-master test-git]# kubectl get ingressroute
NAME AGE
myapp 78s
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
访问web页面验证

# 版本更新
接下来模拟配置变更,将镜像版本从v1改为v2

查看argocd信息,发现已经自动同步了yaml文件,并且正在进行发布

访问web页面状态,发现已经完成了发布工作。

此时整个应用关联关系如下

# 版本回退
点击history and rollback即可看到整个应用的所有发布记录,并且可以选择指定版本进行回退操作。

再次访问发现已经回退到v1版本

上次更新: 2026/05/18, 11:45:08
|