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

问题描述 投票:0回答:2

我们拥有使用 AWS EKS 并安装了 Tekton 的完整设置,并希望使用 ArgoCD 进行应用程序部署。

正如文档所述,我们在 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 服务器(包括仪表板)正如文档告诉我们的那样

  - 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

最后我们用brew安装了

argocd
CLI:

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

现在我们如何使用 GitHub Actions 执行

argocd login
(无需人工交互)?
argocd login
命令需要用户名和密码...

kubernetes github-actions continuous-deployment amazon-eks argocd
2个回答
5
投票

相同的文档告诉我们如何提取 argo 的密码

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
--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 中看起来像这样(请参阅此处的完整日志):

'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-server
命令之前全新安装
argocd login
Kubernetes 服务,则会出现此错误。然后
argocd login
命令会失败一段时间,直到最终能正常工作。

假设存在一些 DNS 传播问题,我们可以通过将

argocd login
命令包装到
until
中来防止此错误破坏我们的 CI 管道,就像在这个答案中已经完成的那样。完整的命令将如下所示:

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

这还有日志


0
投票
或者,您可以执行运行 argocd-server kubernetes pod:

kubectl exec -it argocd-server-669c567686-886np -n argocd -- /bin/bash
由于末尾的哈希值,您的 pod 名称会有所不同。然后使用以下命令登录本地 argocd:

argocd login localhost:8080 --insecure
它将提示您输入用户名和密码。如果这是您第一次登录,您可以在秘密中找到初始密码

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
    
© www.soinside.com 2019 - 2024. All rights reserved.