跳转至

GitOps 工具链

请参考视频demo来快速熟悉用DevStream来实施GitOps工具链的部署和整合: - YouTube

  • 哔哩哔哩

所需插件

  1. repo-scaffolding
  2. jira-github
  3. githubactions-golang
  4. argocd
  5. argocdapp

这些插件的依赖关系如下(a -> b意味着a依赖b):

  • jira-github -> repo-scaffolding
  • githubactions-golang -> repo-scaffolding
  • argocdapp -> argocd, githubactions-golangrepo-scaffolding

注意:依赖并不是必须指定的,我们可以用依赖确保某个工具可以先于另外一个工具安装。我们应该根据实际的使用场景来使用dependsOn

1 下载DevStream(dtm

DevStream Releases页面下载适合你操作系统和CPU架构的dtm

将二进制文件改名为dtm,以便易于使用。例如,执行:mv dtm-drawin-arm64 dtm

下载之后,你可以在任意地方执行这个二进制文件。你可以将它加入到你的PATH中(例如/usr/local/bin)。

2 准备配置文件

gitops.yaml下载到你的工作目录下:

Bash
curl -o gitops.yaml https://raw.githubusercontent.com/devstream-io/devstream/main/examples/gitops.yaml

然后对gitops.yaml文件做相应的修改。

配置文件中用到的变量的解释和示例值如下:

Variable Example Note
defaultBranch main 你想使用的分支名称
githubUsername daniel-hutao 你的GitHub用户名(区分大小写)
repoName go-webapp 只要它不在你的GitHub账户下,这个名称就是合法的
dockerhubUsername exploitht 你的DockerHub用户名(区分大小写)
jiraID merico 这是一个域名前缀就像https://merico.atlassian.net 中的merico
jiraProjectKey DT 项目issue key的描述性前缀,用于识别来自该项目的工作
jiraUserEmail tao.hu@merico.dev 登录Jira的邮箱
argocdNameSpace argocd ArgoCD用的namespace
argocdDeployTimeout 10m ArgoCD部署的timeout时长

这些插件需要设定一下环境变量:

Bash
export GITHUB_TOKEN="YOUR_GITHUB_TOKEN_HERE"
export JIRA_API_TOKEN="YOUR_JIRA_API_TOKEN_HERE"
export DOCKERHUB_TOKEN="YOUR_DOCKERHUB_TOKEN_HERE"

如果你不知道如何获取以上环境变量的值,请参考以下链接(英文):

3 初始化

执行:

Bash
dtm init -f gitops.yaml

4 Apply

执行:

Bash
dtm apply -f gitops.yaml

并且确认继续,然后你就能看到类似如下的输出:

Text Only
...
2022-03-11 13:36:11 ✔ [SUCCESS]  All plugins applied successfully.
2022-03-11 13:36:11 ✔ [SUCCESS]  Apply finished.

5 检查结果

我们接着来看apply命令的结果。

5.1 仓库结构

  • 我们得到的仓库结构看起来如下:

5.2 Jira-Github 集成

  • 测试Jira和Github之间的整合,让我们新创建一个issue:

  • 上述issue将会自动地被重命名:

  • 我们可以在Jira中找到这个自动同步的Story

  • 如果我们在这个issue留下评论:

  • 这个评论也会被自动同步到Jira中:

5.3 为Golang设置Github Actions CI

  • CI在这里可以做以下事情:

  • CI流程同时也会构建Docker镜像,之后该镜像会被自动推送到DockerHub中:

5.4 ArgoCD部署

  • ArgoCD已经被装好了:

5.5 ArgoCD应用部署

  • 我们的代码刚刚被构建到镜像中,此时这个镜像会作为一个Pod自动部署到我们的k8s中:

6 清理

执行:

Bash
dtm destroy -f gitops.yaml

然后你应该能看到类似的输出结果:

Text Only
2022-03-11 13:39:11 ✔ [SUCCESS]  All plugins destroyed successfully.
2022-03-11 13:39:11 ✔ [SUCCESS]  Destroy finished.