kdeploy 1.2.33 → 1.2.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba776f38e5a34ec7e6dac606aac7202391fdab2e4869aec08f526b3228bc8deb
4
- data.tar.gz: aaa348b87ad83b9c8c1ad3291a2e45395594b922c1594fa82d54cd2a9b7c6d30
3
+ metadata.gz: a38f6cd05a9b367146a9589800c65ebbc62a1c4192b6be8347d1156031c54d6b
4
+ data.tar.gz: 1cde973c19e35e14d299fbc2c8e307f2a69093d8a442d542a9db262f057213a4
5
5
  SHA512:
6
- metadata.gz: 7d731fd05fddc4b03c0aaef558e5200b6584772159262405d80cf807eae5f096689201e60aad944f0dd51b2a5e0db7d1d883476ec945cd3984a19383c840830c
7
- data.tar.gz: 6ce986d5b3a60685ed51340298a0d0fbe22d25c2ee7c7cf584b3870d23174d004597e5135c7bb52a2f2f1d1006806c552d49ddcdb92080808348a580ec865947
6
+ metadata.gz: 9db48da0d7a90fa51389c2311b0aaea919cc87d4e47360ce3323f5202a96d3998e955819a5d39528f998f9edb2d4f90808bfd5dfdab1b2ea47c4f443a57452b5
7
+ data.tar.gz: 98d5a5c755f1a75e2491f4a8d09e1842851bf077316f6a50f11f964ebaef334f6b6666017d8a78b4918dcef4f17d8e181e4d60e5867212db3bea163d6c860c0e
data/README.md CHANGED
@@ -98,6 +98,12 @@ kdeploy version
98
98
 
99
99
  您应该看到版本信息和横幅。
100
100
 
101
+ **若找不到 `kdeploy` 命令**:gem 的可执行目录可能不在 PATH 中。将以下内容加入 `~/.zshrc` 或 `~/.bashrc` 后执行 `source ~/.zshrc`:
102
+
103
+ ```bash
104
+ export PATH="$(ruby -e 'puts Gem.bindir'):$PATH"
105
+ ```
106
+
101
107
  ### Shell 自动补全
102
108
 
103
109
  Kdeploy 在安装期间自动配置 shell 自动补全。如果需要,可以手动添加到 shell 配置中:
@@ -137,35 +143,30 @@ kdeploy init my-deployment
137
143
 
138
144
  ### 2. 配置主机和任务
139
145
 
140
- 编辑 `deploy.rb`:
146
+ 编辑 `deploy.rb`(使用 Chef 风格资源 DSL):
141
147
 
142
148
  ```ruby
143
149
  # 定义主机
144
150
  host "web01", user: "ubuntu", ip: "10.0.0.1", key: "~/.ssh/id_rsa"
145
151
  host "web02", user: "ubuntu", ip: "10.0.0.2", key: "~/.ssh/id_rsa"
146
-
147
- # 定义角色
148
152
  role :web, %w[web01 web02]
149
153
 
150
154
  # 定义部署任务
151
- task :deploy, roles: :web do
152
- run <<~SHELL
153
- sudo systemctl stop nginx
154
- echo "正在部署应用程序..."
155
- SHELL
156
-
157
- upload_template "./config/nginx.conf.erb", "/etc/nginx/nginx.conf",
158
- domain_name: "example.com",
159
- port: 3000
160
-
161
- run "sudo systemctl start nginx"
155
+ task :deploy_web, roles: :web do
156
+ package "nginx"
157
+ directory "/etc/nginx/conf.d"
158
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb",
159
+ variables: { domain_name: "example.com", port: 3000 }
160
+ file "/etc/nginx/conf.d/app.conf", source: "./config/app.conf"
161
+ run "nginx -t", sudo: true
162
+ service "nginx", action: %i[enable restart]
162
163
  end
163
164
  ```
164
165
 
165
166
  ### 3. 运行部署
166
167
 
167
168
  ```bash
168
- kdeploy execute deploy.rb deploy
169
+ kdeploy execute deploy.rb deploy_web
169
170
  ```
170
171
 
171
172
  ## 📖 使用指南
@@ -356,7 +357,7 @@ end
356
357
 
357
358
  ```ruby
358
359
  task :deploy_web, roles: :web do
359
- run "sudo systemctl restart nginx"
360
+ service "nginx", action: :restart
360
361
  end
361
362
  ```
362
363
 
@@ -364,29 +365,22 @@ end
364
365
 
365
366
  ```ruby
366
367
  task :maintenance, on: %w[web01] do
367
- run <<~SHELL
368
- sudo systemctl stop nginx
369
- sudo apt-get update && sudo apt-get upgrade -y
370
- sudo systemctl start nginx
371
- SHELL
368
+ service "nginx", action: :stop
369
+ run "apt-get update && apt-get upgrade -y", sudo: true
370
+ service "nginx", action: %i[start enable]
372
371
  end
373
372
  ```
374
373
 
375
374
  #### 多命令任务
376
375
 
377
376
  ```ruby
378
- task :deploy, roles: :web do
379
- # 停止服务
380
- run "sudo systemctl stop nginx"
381
-
382
- # 上传配置
383
- upload "./config/nginx.conf", "/etc/nginx/nginx.conf"
384
-
385
- # 启动服务
386
- run "sudo systemctl start nginx"
387
-
388
- # 验证状态
389
- run "sudo systemctl status nginx"
377
+ task :deploy_web, roles: :web do
378
+ package "nginx"
379
+ directory "/etc/nginx/conf.d"
380
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb", variables: { port: 3000 }
381
+ file "/etc/nginx/conf.d/app.conf", source: "./config/app.conf"
382
+ run "nginx -t", sudo: true
383
+ service "nginx", action: %i[enable restart]
390
384
  end
391
385
  ```
392
386
 
@@ -529,6 +523,67 @@ sync "./config", "/etc/app",
529
523
  - 同步静态资源文件
530
524
  - 保持本地和远程目录结构一致
531
525
 
526
+ ### Chef 风格资源 DSL
527
+
528
+ Kdeploy 提供类似 Chef 的声明式资源 DSL,可替代或与底层原语(`run`、`upload`、`upload_template`)混用。
529
+
530
+ #### `package` - 安装系统包
531
+
532
+ ```ruby
533
+ package "nginx"
534
+ package "nginx", version: "1.18"
535
+ package "nginx", platform: :yum # CentOS/RHEL
536
+ ```
537
+
538
+ 默认使用 apt(Ubuntu/Debian);`platform: :yum` 生成 yum 命令。
539
+
540
+ #### `service` - 管理系统服务(systemd)
541
+
542
+ ```ruby
543
+ service "nginx", action: [:enable, :start]
544
+ service "nginx", action: :restart
545
+ service "nginx", action: [:stop, :disable]
546
+ ```
547
+
548
+ 支持 `:start`、`:stop`、`:restart`、`:reload`、`:enable`、`:disable`。
549
+
550
+ #### `template` - 部署 ERB 模板
551
+
552
+ ```ruby
553
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb", variables: { port: 3000 }
554
+ # 或 block 语法
555
+ template "/etc/app.conf" do
556
+ source "./config/app.erb"
557
+ variables(domain: "example.com")
558
+ end
559
+ ```
560
+
561
+ #### `file` - 上传本地文件
562
+
563
+ ```ruby
564
+ file "/etc/nginx/conf.d/app.conf", source: "./config/app.conf"
565
+ ```
566
+
567
+ #### `directory` - 确保远程目录存在
568
+
569
+ ```ruby
570
+ directory "/etc/nginx/conf.d"
571
+ directory "/var/log/app", mode: "0755"
572
+ ```
573
+
574
+ **示例:使用资源 DSL 部署 Nginx**
575
+
576
+ ```ruby
577
+ task :deploy_nginx, roles: :web do
578
+ package "nginx"
579
+ directory "/etc/nginx/conf.d"
580
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb", variables: { port: 3000 }
581
+ file "/etc/nginx/conf.d/app.conf", source: "./config/app.conf"
582
+ run "nginx -t"
583
+ service "nginx", action: [:enable, :restart]
584
+ end
585
+ ```
586
+
532
587
  ### 模板支持
533
588
 
534
589
  Kdeploy 支持 ERB(嵌入式 Ruby)模板,用于动态配置生成。
@@ -575,11 +630,8 @@ http {
575
630
 
576
631
  ```ruby
577
632
  task :deploy_config do
578
- upload_template "./config/nginx.conf.erb", "/etc/nginx/nginx.conf",
579
- domain_name: "example.com",
580
- port: 3000,
581
- worker_processes: 4,
582
- worker_connections: 2048
633
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb",
634
+ variables: { domain_name: "example.com", port: 3000, worker_processes: 4, worker_connections: 2048 }
583
635
  end
584
636
  ```
585
637
 
@@ -642,15 +694,11 @@ verify_host_key: true
642
694
 
643
695
  ```ruby
644
696
  task :deploy do
645
- if ENV['ENVIRONMENT'] == 'production'
646
- run "sudo systemctl stop nginx"
647
- end
697
+ service "nginx", action: :stop if ENV['ENVIRONMENT'] == 'production'
648
698
 
649
- upload "./config/nginx.conf", "/etc/nginx/nginx.conf"
699
+ file "/etc/nginx/nginx.conf", source: "./config/nginx.conf"
650
700
 
651
- if ENV['ENVIRONMENT'] == 'production'
652
- run "sudo systemctl start nginx"
653
- end
701
+ service "nginx", action: :start if ENV['ENVIRONMENT'] == 'production'
654
702
  end
655
703
  ```
656
704
 
@@ -673,9 +721,10 @@ end
673
721
 
674
722
  ```ruby
675
723
  task :deploy do
676
- run "sudo systemctl stop nginx" || raise "停止 nginx 失败"
677
- upload "./config/nginx.conf", "/etc/nginx/nginx.conf"
678
- run "sudo systemctl start nginx" || raise "启动 nginx 失败"
724
+ service "nginx", action: :stop
725
+ file "/etc/nginx/nginx.conf", source: "./config/nginx.conf"
726
+ run "nginx -t" || raise "Nginx 配置无效"
727
+ service "nginx", action: :start
679
728
  end
680
729
  ```
681
730
 
@@ -753,10 +802,9 @@ end
753
802
  ### 3. 使用模板进行动态配置
754
803
 
755
804
  ```ruby
756
- # ✅ 好的做法 - 使用模板
757
- upload_template "./config/nginx.conf.erb", "/etc/nginx/nginx.conf",
758
- domain_name: "example.com",
759
- port: 3000
805
+ # ✅ 好的做法 - 使用 template 资源
806
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb",
807
+ variables: { domain_name: "example.com", port: 3000 }
760
808
 
761
809
  # ❌ 避免 - 硬编码值
762
810
  run "echo 'server_name example.com;' > /etc/nginx/nginx.conf"
@@ -766,12 +814,10 @@ run "echo 'server_name example.com;' > /etc/nginx/nginx.conf"
766
814
 
767
815
  ```ruby
768
816
  task :deploy do
769
- # 验证配置
770
- run "nginx -t" || raise "Nginx 配置无效"
771
-
772
- # 部署
773
- upload "./config/nginx.conf", "/etc/nginx/nginx.conf"
774
- run "sudo systemctl reload nginx"
817
+ template "/etc/nginx/nginx.conf", source: "./config/nginx.conf.erb", variables: { port: 3000 }
818
+ file "/etc/nginx/conf.d/app.conf", source: "./config/app.conf"
819
+ run "nginx -t", sudo: true # 配置无效时 run 会抛异常
820
+ service "nginx", action: :reload
775
821
  end
776
822
  ```
777
823
 
@@ -875,7 +921,6 @@ kdeploy execute deploy.rb deploy --parallel 3
875
921
  - **Executor** (`executor.rb`): SSH/SCP 执行引擎
876
922
  - **Runner** (`runner.rb`): 并发任务执行协调器
877
923
  - **CommandExecutor** (`command_executor.rb`): 单个命令执行
878
- - **CommandGrouper** (`command_grouper.rb`): 命令分组逻辑
879
924
  - **Template** (`template.rb`): ERB 模板渲染
880
925
  - **Output** (`output.rb`): 输出格式化和显示
881
926
  - **Configuration** (`configuration.rb`): 配置管理
@@ -885,10 +930,9 @@ kdeploy execute deploy.rb deploy --parallel 3
885
930
 
886
931
  1. **解析配置**: 加载并解析 `deploy.rb`
887
932
  2. **解析主机**: 根据任务定义确定目标主机
888
- 3. **分组命令**: 按类型分组命令以提高执行效率
889
- 4. **并发执行**: 跨主机并行运行任务
890
- 5. **收集结果**: 收集执行结果和状态
891
- 6. **显示输出**: 格式化并向用户显示结果
933
+ 3. **并发执行**: 跨主机并行运行任务,按序执行每台主机上的命令
934
+ 4. **收集结果**: 收集执行结果和状态
935
+ 5. **显示输出**: 格式化并向用户显示结果
892
936
 
893
937
  ### 并发模型
894
938
 
@@ -928,7 +972,6 @@ kdeploy/
928
972
  │ ├── executor.rb # SSH/SCP 执行器
929
973
  │ ├── runner.rb # 任务运行器
930
974
  │ ├── command_executor.rb # 命令执行器
931
- │ ├── command_grouper.rb # 命令分组器
932
975
  │ ├── template.rb # 模板处理器
933
976
  │ ├── output.rb # 输出接口
934
977
  │ ├── configuration.rb # 配置
@@ -1012,7 +1055,14 @@ bundle exec rubocop -a
1012
1055
 
1013
1056
  ### 示例项目
1014
1057
 
1015
- 查看 [示例项目](https://github.com/kevin197011/kdeploy-app) 以获取完整的部署设置。
1058
+ 本仓库的 [sample/](sample/) 目录提供完整示例,包含 Nginx、Node Exporter、目录同步等任务,支持 Vagrant 本地测试:
1059
+
1060
+ ```bash
1061
+ cd sample
1062
+ vagrant up
1063
+ kdeploy execute deploy.rb deploy_web --dry-run # 预览
1064
+ kdeploy execute deploy.rb deploy_web # 执行
1065
+ ```
1016
1066
 
1017
1067
  ### 常见部署场景
1018
1068
 
@@ -1053,12 +1103,9 @@ end
1053
1103
 
1054
1104
  ```ruby
1055
1105
  task :update_config, roles: :web do
1056
- upload_template "./config/app.yml.erb", "/etc/app/config.yml",
1057
- environment: "production",
1058
- database_url: ENV['DATABASE_URL'],
1059
- redis_url: ENV['REDIS_URL']
1060
-
1061
- run "sudo systemctl reload app"
1106
+ template "/etc/app/config.yml", source: "./config/app.yml.erb",
1107
+ variables: { environment: "production", database_url: ENV['DATABASE_URL'], redis_url: ENV['REDIS_URL'] }
1108
+ service "app", action: :reload
1062
1109
  end
1063
1110
  ```
1064
1111
 
@@ -1066,16 +1113,11 @@ end
1066
1113
 
1067
1114
  ```ruby
1068
1115
  task :deploy_app, roles: :web do
1069
- # 同步应用程序代码,忽略开发文件
1070
1116
  sync "./app", "/var/www/app",
1071
1117
  ignore: [".git", "*.log", "node_modules", ".env.local", "*.tmp"],
1072
1118
  delete: true
1073
-
1074
- # 同步配置文件
1075
- sync "./config", "/etc/app",
1076
- exclude: ["*.example", "*.bak"]
1077
-
1078
- run "sudo systemctl restart app"
1119
+ sync "./config", "/etc/app", exclude: ["*.example", "*.bak"]
1120
+ service "app", action: :restart
1079
1121
  end
1080
1122
  ```
1081
1123
 
@@ -1088,7 +1130,7 @@ end
1088
1130
  - **GitHub**: https://github.com/kevin197011/kdeploy
1089
1131
  - **RubyGems**: https://rubygems.org/gems/kdeploy
1090
1132
  - **Issues**: https://github.com/kevin197011/kdeploy/issues
1091
- - **示例项目**: https://github.com/kevin197011/kdeploy-app
1133
+ - **示例**: [sample/](sample/) 目录(含 Vagrant 配置)
1092
1134
 
1093
1135
  ## 🙏 致谢
1094
1136