如何像 GitHub Actions 一样在 CI 中以非交互方式登录 ArgoCD CLI?

2024-02-22

We have 使用 AWS EKS 与 Tekton 的完整设置 https://github.com/jonashackt/tekton-argocd-eks已安装并希望使用 ArgoCD 进行应用程序部署。

正如文档所述 https://argo-cd.readthedocs.io/en/stable/getting_started/我们在 GitHub Actions 的 EKS 上安装了 ArgoCD:

  - name: Install ArgoCD
    run: |
      echo "--- Create argo namespace and install it"
      kubectl create namespace argocd --dry-run=client -o yaml | kubectl apply -f -
      kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

我们还公开了 ArgoCD 服务器(包括仪表板)正如文档告诉我们的 https://argo-cd.readthedocs.io/en/stable/getting_started/#3-access-the-argo-cd-api-server:

  - name: Expose ArgoCD Dashboard
    run: |
      echo "--- Expose ArgoCD Dashboard via K8s Service"
      kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

      echo "--- Wait until Loadbalancer url is present (see https://stackoverflow.com/a/70108500/4964553)"
      until kubectl get service/argocd-server -n argocd --output=jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done

最后我们安装了argocdCLI 与brew:

      echo "--- Install ArgoCD CLI"
      brew install argocd

现在我们怎样才能做一个argocd login使用 GitHub Actions(无需人工交互)?这argocd login命令需要用户名和密码...


相同的文档告诉我们如何提取密码 https://argo-cd.readthedocs.io/en/stable/getting_started/#4-login-using-the-cli对于阿尔戈:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

获取ArgoCD服务器的hostname使用以下方法也没什么大不了的:

kubectl get service argocd-server -n argocd --output=jsonpath='{.status.loadBalancer.ingress[0].hostname}'

并且作为argocd login命令有参数--username and --password, 我们可以像这样制作我们的登录命令:

argocd login $(kubectl get service argocd-server -n argocd --output=jsonpath='{.status.loadBalancer.ingress[0].hostname}') --username admin --password $(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo) --insecure

注意--insecure防止 argo CLI 询问诸如WARNING: server certificate had error: x509: certificate is valid for localhost, argocd-server, argocd-server.argocd, argocd-server.argocd.svc, argocd-server.argocd.svc.cluster.local, not a5f715808162c48c1af54069ba37db0e-1371850981.eu-central-1.elb.amazonaws.com. Proceed insecurely (y/n)?.

成功登录在 GitHub Actions UI 中应该看起来像这样(请参阅完整的日志在这里 https://github.com/jonashackt/tekton-argocd-eks/runs/5105912670?check_suite_focus=true):

'admin:login' logged in successfully
Context 'a5f715808162c48c1af54069ba37db0e-1371850981.eu-central-1.elb.amazonaws.com' updated

现在您的 GitHub Actions 工作流程应该能够与 ArgoCD 服务器进行交互。

防止错误FATA[0000] dial tcp: lookup a965bfb530e8449f5a355f221b2fd107-598531793.eu-central-1.elb.amazonaws.com on 8.8.8.8:53: no such host

如果出现此错误argocd-serverKubernetes 服务是在运行之前全新安装的argocd login命令已运行。然后argocd login命令失败了一段时间,直到它最终可以正常工作。

假设存在一些 DNS 传播问题,我们可以通过包装我们的 CI 管道来防止此错误破坏我们的 CI 管道。argocd login命令进入一个until就像已经完成的一样在这个答案中 https://stackoverflow.com/a/70108997/4964553。完整的命令将如下所示:

until argocd login $(kubectl get service argocd-server -n argocd --output=jsonpath='{.status.loadBalancer.ingress[0].hostname}') --username admin --password $(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo) --insecure; do : ; done

在 GitHub Actions 中,这将看起来像这样:

--- Login argocd CLI - now wrapped in until to prevent FATA[0000] dial tcp: lookup 12345.eu-central-1.elb.amazonaws.com on 8.8.8.8:53: no such host
time="2022-02-21T12:57:32Z" level=fatal msg="dial tcp: lookup a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host"
time="2022-02-21T12:57:35Z" level=fatal msg="dial tcp: lookup a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host"
time="2022-02-21T12:57:37Z" level=fatal msg="dial tcp: lookup a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host"
[...]
time="2022-02-21T12:58:27Z" level=fatal msg="dial tcp: lookup a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host"
time="2022-02-21T12:58:30Z" level=fatal msg="dial tcp: lookup a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host"
time="2022-02-21T12:58:32Z" level=fatal msg="dial tcp: lookup a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host"
'admin:login' logged in successfully
Context 'a071bed7e9ea14747951b04360133141-459093397.eu-central-1.elb.amazonaws.com' updated

这里还有一个日志 https://github.com/jonashackt/tekton-argocd-eks/runs/5274400263?check_suite_focus=true.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何像 GitHub Actions 一样在 CI 中以非交互方式登录 ArgoCD CLI? 的相关文章

随机推荐

  • 在首页以外的其他页面中显示图像时出现问题(wordpress/html/css)

    您好 我有一个正在为客户做的小网站 我使用了 html css 网站并使用空白主题将其转移到 WordPress 到目前为止一切顺利 如果您愿意 请查看 energyshop se 在起始页中显示了顶部的两个图像 但没有显示其余选项卡 为什
  • firestore 权限缺失或不足

    我收到错误 Firebase 缺少或权限不足 代码 const demoCollectionRef this db collection items 返回 demoCollectionRef add item 我认为这个错误是由于 angu
  • Android Studio 3.0.1 上的 Gradle 项目同步失败

    我是第一次在笔记本电脑上安装 Android Studio 3 0 1 但无法创建我的第一个 Hello World 应用程序 我收到以下错误 Create process failed error 216 Error Consult yo
  • div 下面仍然触发 click 事件

    这是我正在构建的 PhoneGap 应用程序 我正在我的笔记本电脑上进行测试 然后使用 PhoneGap cli 在 iPhone 上进行测试 我有一个 openlayers 3 地图 上面记录了点击事件 我还有一个 div 当菜单显示时
  • 在 Android 中显示撰写短信视图

    我想用 Android 发送短信 发送短信的目的是什么 我想显示撰写短信视图 并在消息字段中传递我的预定义文本 您可以使用以下代码 startActivity new Intent Intent ACTION VIEW Uri parse
  • 自动从网页中提取提要链接(atom、rss等)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个巨大的 URL 列表 我的任务是将它们提供给一个 python 脚本 该脚本应该吐出提要 UR
  • Android:当软输入键盘出现时,Recyclerview 不会调整大小

    我有一个包含片段的活动 并且该片段包含自定义视图 自定义视图包含一个编辑文本 其正下方是一个高度为 match parent 的回收视图 当用户将焦点放在编辑文本上时 会出现一个软输入键盘 不幸的是 该键盘隐藏了其下方一半的回收视图 我希望
  • 如何从mysql表中获取自增字段名或主键字段名?

    在PHP中 如何获取已设置为在添加新记录时自动递增的字段的字段名称 在大多数情况下 它与表的 PRIMARY KEY 相同 但不一定总是如此 所以这个问题有两部分 第二部分分支为第三部分 1 如何获取自增字段名称 2 如何获取primary
  • Android Gradle 支持库必须使用相同版本

    我已经查看了所有其他问题并用谷歌搜索了不可能的问题 但我找不到使用正确依赖项的方法 下面是我的应用程序 Gradle 构建文件 buildscript repositories google jcenter dependencies cla
  • 从解决方案中删除 TFS 连接

    如何将解决方案制作为干净副本而不映射到 TFS 问题是当我尝试打开它时会显示此消息 我想在没有 TFS 连接的情况下正常打开它 要完全删除 TFS 源代码管理绑定 请执行以下两个步骤 转到解决方案的文件夹 查找并删除所有文件 vssscc
  • 由于 libssl 依赖,`apt-get install librdkafka1` 在 Debian 9.x 上失败

    Basic apt get install librdkafka1在 Debian 8 x 上工作 但在 Debian 9 x 上失败 这看起来像是关于 libssl 的依赖版本问题 Debian 8 x 有 libssl1 0 0 Deb
  • 为什么需要 islower() 及其朋友来处理 EOF?

    Why are islower 以及需要处理的朋友EOF 然而putchar 朋友们不需要吗 为什么不是islower 治疗int as unsigned char 就像情况一样putchar 这是完全有道理的 因为我们必须检查EOF无论如
  • libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”

    为了将 gt 2GB 的原始读数上传到 Genebank 上的 SRA 我在 ubuntu 16 04 上安装了 aspera connect 插件 但按照基因库 SRA 门户上的说明 该插件并未弹出 当我在本地初始化插件时 我在终端上收到
  • 创建可训练权重的 Keras 层

    edit请参阅底部以了解我如何解决此问题 我写了自己的Keras层 其构建方法如下 class Multed Weights Layer def init self input dim output dim kwargs self outp
  • 位操作:打印下一个最小和最大的具有相同位数的 1 位

    给定一个整数 打印其二进制表示中具有相同数量的 1 位的下一个最小和下一个最大数字 数完数字中1的个数后 如何确定下一个最小的数字 对于下一个高度 您可以使用 Hakmem 175 第 175 项 高斯珀 要获取具有相同数量 1 位的下一个
  • 查找并排序目录

    我需要查找不超过 30 天的目录 然后按日期对它们进行排序 从最新到最旧 这是我的命令 find tmp logs maxdepth 1 mindepth 1 type d mtime 30 问题显然是排序部分 如果只有 几个 目录 您可以
  • SLCOmposeviewcontroller Twitter 共享警报问题

    我一直在使用这个代码来发布推特 SLComposeViewController fbController SLComposeViewController composeViewControllerForServiceType SLServi
  • Bootstrap glyphicon-菜单-汉堡包未显示

    这是明确定义的汉堡菜单引导图标 http getbootstrap com components glyphicons glyphs http getbootstrap com components glyphicons glyphs 如果
  • PHP如何删除最后一个逗号[重复]

    这个问题在这里已经有答案了 输出示例 1 test test test test test 2 test test test 3 test test 4 test 我尝试根据我的使用内爆上一个问题 https stackoverflow c
  • 如何像 GitHub Actions 一样在 CI 中以非交互方式登录 ArgoCD CLI?

    We have 使用 AWS EKS 与 Tekton 的完整设置 https github com jonashackt tekton argocd eks已安装并希望使用 ArgoCD 进行应用程序部署 正如文档所述 https arg