繁体   English   中英

使用 Jenkins 管道无法识别 aws eks 命令

[英]aws eks command not recognized using Jenkins pipeline

我创建了一个 EC2 实例,其中 Jenkins 正在运行,连接到我的 GitHub 帐户。 以下是我的 Jenkins 管道的两个步骤:

pipeline {
    agent any
    stages {
        stage('Kubernetes cluster') {
            steps {
                withAWS(region:'us-west-2', credentials:'aws-kubernetes') {
                    sh '''
                    if [ ! aws cloudformation describe-stacks --region us-west-2 --stack-name eksctl-EmaJarK8sCluster-cluster ] ; then

                        if [ ! aws cloudformation describe-stacks --region us-west-2 --stack-name eksctl-EmaJarK8sCluster-nodegroup-standard-workers ] ; then

                            eksctl create cluster \
                            --name EmaJarK8sCluster \
                            --version 1.13 \
                            --nodegroup-name standard-workers \
                            --node-type t2.small \
                            --nodes 2 \
                            --nodes-min 1 \
                            --nodes-max 3 \
                            --node-ami auto \
                            --region us-west-2 \
                            --zones us-west-2a \
                            --zones us-west-2b \
                            --zones us-west-2c \

                        fi

                    fi
                    '''
                }
            }
        }

        stage('Configuration file cluster') {
            steps {
                withAWS(region:'us-west-2', credentials:'aws-kubernetes') {
                    sh '''
                        aws eks --region us-west-2 update-kubeconfig --name EmaJarK8sCluster
                    '''
                }
            }
        }
    }
}

第一步创建一个 Kubernetes 集群,如果它不存在,第二步为该集群创建一个配置文件。 此步骤运行良好,并创建了两个 cloudformation 堆栈和一台运行 Kubernetes 集群的 EC2 机器。

第二阶段失败并出现以下错误:

Invalid choice: 'eks', maybe you meant:

  * es

在阅读了一些教程后,我发现我需要将awscli更新到版本1.18.57才能使用eks命令。 所以我已经登录到我的 Jenkins 机器(不是专用于 k8s 集群的机器)并更新了awscli 不幸的是,这还不够。 我仍然得到同样的错误。 我可以手动将命令运行到机器 Jenkins 中,但由于某种原因,我无法通过 Jenkins 管道运行它。

有人可以帮我解决这个问题吗?

提前致谢。

您能否提供aws命令的完整路径? 还将which awsaws --version添加到第二阶段脚本,并确认 output。

上面应该突出显示命令的实际路径和当前版本。 根据需要更正您的配置。

您是否更新jenkins代理?

如果不:

升级 Windows 服务包装器

  1. 升级 Jenkins 到提供该模块的版本
  2. Jenkins 有望自动升级jenkins-slave.exe可执行文件
  3. 如果发生升级,您应该能够在 Jenkins Web UI 的Agent log中看到消息
  4. 升级完成后,更改将应用于下一次 Windows 服务重启

不幸的是,提供的解决方案对我不起作用。 我的目标是设置一台可以运行 Kubernetes 环境的机器,以实现蓝/绿部署。 必须使用 Jenkins 处理部署,因此我必须为 Jenkins 本身创建一个专用机器。

我按照本指南设置了所有依赖项: https://medium.com/faun/learning-kubernetes-by-doing-part-1-setting-up-eks-in-aws-50dcf7a76247

我之前犯的错误是使用brew安装所有这些依赖项。 这导致了很多问题并污染了我的 PATH 环境变量。 我解决了它终止机器并创建一个新实例。 在这种情况下,我手动或使用 apt-get 安装了依赖项。

我必须安装的资源:

  • AWS CLI
  • IAM-AWS-AUTHENTICATOR
  • Docker
  • eksctl

几点注意事项:

  • 确保安装 eksctl 版本 0.19.0,如此所述
  • 如果您收到错误"aws-iam-authenticator": executable file not found in $PATH ,请务必按照指南安装aws-iam-authenticator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM