用 DTM Tools 实现基于 Gitlab,Argo CD 和 Gitlab CI 的 CICD 流程

DevStream 抽象了2个概念:ToolsApps

前一个用户场景 里介绍了 “Apps”,你可以用 “Tools” 实现一样的效果。具体方法如下:

配置环境变量

你需要配置以下两个环境变量:

Bash

  1. export GITLAB_TOKEN="YOUR_GITLAB_TOKEN"
  2. export IMAGE_REPO_PASSWORD="YOUR_DOCKERHUB_TOKEN_HERE"

配置文件

YAML

  1. config:
  2. state:
  3. backend: local
  4. options:
  5. stateFile: devstream.state
  6. vars:
  7. gitlabUser: YOUR_GITLAB_USERNAME
  8. dockerUser: YOUR_DOCKERHUB_USERNAME
  9. app: testapp
  10. tools:
  11. - name: helm-installer
  12. instanceID: argocd
  13. - name: repo-scaffolding
  14. instanceID: myapp
  15. options:
  16. destinationRepo:
  17. owner: [[ gitlabUser ]]
  18. name: [[ app ]]
  19. branch: master
  20. scmType: gitlab
  21. # set env GITLAB_TOKEN
  22. token: [[ env GITLAB_TOKEN ]]
  23. sourceRepo:
  24. org: devstream-io
  25. name: dtm-repo-scaffolding-python-flask
  26. scmType: github
  27. - name: gitlab-ci
  28. instanceID: flask
  29. dependsOn: [ "repo-scaffolding.myapp" ]
  30. options:
  31. scm:
  32. owner: [[ gitlabUser ]]
  33. name: [[ app ]]
  34. branch: master
  35. scmType: gitlab
  36. token: [[ env GITLAB_TOKEN ]]
  37. pipeline:
  38. language:
  39. framework: flask
  40. name: python
  41. imageRepo:
  42. user: [[ dockerUser ]]
  43. # set env IMAGE_REPO_PASSWORD
  44. password: [[ env IMAGE_REPO_PASSWORD ]]
  45. - name: argocdapp
  46. instanceID: default
  47. dependsOn: [ "helm-installer.argocd", "gitlab-ci.flask" ]
  48. options:
  49. app:
  50. name: [[ app ]]
  51. namespace: argocd
  52. destination:
  53. server: https://kubernetes.default.svc
  54. namespace: default
  55. source:
  56. valuefile: values.yaml
  57. path: helm/[[ app ]]
  58. repoURL: ${{repo-scaffolding.myapp.outputs.repoURL}}
  59. token: [[ env GITLAB_TOKEN ]]
  60. imageRepo:
  61. user: [[ dockerUser ]]
  62. password: [[ env IMAGE_REPO_PASSWORD ]]

需要相应更新上述配置文件里的 “YOUR_GITLAB_USERNAME” 和 “YOUR_DOCKERHUB_USERNAME”。

注意:

上述配置运行的前提是你的 GitLab 已经配置好了共享 runner 来执行 ci 操作,如果你想要自动创建一个 runner, 你可以参考 gitlab插件文档 来配置由 DevStream 来创建一个项目 runner。


执行

首先需要基于配置文件来初始化插件:

Bash

  1. # this downloads the required plugins, according to the config file, automatically.
  2. dtm init -f config.yaml

然后运行如下命令让配置生效:

Bash

  1. dtm apply -f config.yaml -y

现在我们就可以看到 GitLab 中已经创建了对应的仓库并且 CI 把生成的项目镜像推送到了 Dockerhub 仓库。

GitLab CI

GitLab CI

在你的 Kubernetes 集群中已经创建了对应的应用。

Bash

  1. $ kubectl get application -n argocd
  2. NAME SYNC STATUS HEALTH STATUS
  3. testapp Synced Healthy
  4. $ kubectl get deploy -n default
  5. NAME READY UP-TO-DATE AVAILABLE AGE
  6. testapp 1/1 1 1 4m27s
  7. $ kubectl get pods -n default
  8. NAME READY STATUS RESTARTS AGE
  9. testapp-5f9c75b4f6-57d9p 1/1 Running 0 3m48s