我正在尝试让travis-ci运行自定义部署脚本,该脚本使用awscli
将部署推送到我的登台服务器。
在我的.travis.yml
文件中,我有这个:
before_deploy:
- 'curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"'
- 'unzip awscli-bundle.zip'
- './awscli-bundle/install -b ~/bin/aws'
- 'export PATH=~/bin:$PATH'
- 'aws configure'
我已经设置了以下环境变量:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
在travis-ci
网络界面中使用正确的值。
然而,当aws configure
运行时,它会停止并等待用户输入。如何告诉它使用我定义的环境变量?
答案 0 :(得分:20)
Darbio 的解决方案运行正常,但没有考虑到您最终可能会在您的存储库中推送您的AWS凭据。
这是一个坏事,特别是如果docker试图从您的一个ECR存储库中提取私有图像。这可能意味着您可能不得不将您的AWS生产凭证存储在.travis.yml
文件中,这远远不够理想。
幸运的是,Travis为您提供了加密环境变量,通知设置和部署API密钥的可能性。
gem install travis
首先执行travis login
,它会询问您的github凭据。登录后,进入项目根文件夹(.travis.yml
文件所在的位置)并加密访问密钥ID和秘密访问密钥。
travis encrypt AWS_ACCESS_KEY_ID="HERE_PUT_YOUR_ACCESS_KEY_ID" --add
travis encrypt AWS_SECRET_ACCESS_KEY="HERE_PUT_YOUR_SECRET_ACCESS_KEY" --add
感谢--add
选项,您最终会在配置文件中添加两个新的(加密的)环境变量。现在只需打开您的.travis.yml
文件,您就会看到类似的内容:
env:
global:
- secure: encrypted_stuff
- secure: encrypted_stuff
现在,您可以让travis运行一个shell脚本,为您创建~/.aws/credentials
文件。
<强> ecr_credentials.sh 强>
#!/usr/bin/env bash
mkdir -p ~/.aws
cat > ~/.aws/credentials << EOL
[default]
aws_access_key_id = ${AWS_ACCESS_KEY_ID}
aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}
EOL
然后您只需要从ecr_credentials.sh
文件中运行.travis.yml
脚本:
before_install:
- ./ecr_credentials.sh
完成!的: - d 强>
答案 1 :(得分:10)
您可以通过多种方式设置这些内容。
首先,在~/.aws/config
(或~/.aws/credentials
)创建一个文件。
例如:
[default]
aws_access_key_id=foo
aws_secret_access_key=bar
region=us-west-2
其次,您可以为每个设置添加环境变量。
例如,创建以下环境变量:
AWS_DEFAULT_REGION
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
第三,您可以将区域作为命令行参数传递。例如:
aws eb deploy --region us-west-2
在配置cli时,您不需要在这些情况下运行aws configure
。
this page还有其他AWS文档。
答案 2 :(得分:0)
根据@Darbio 的建议,我想出了这个解决方案:
- stage: deploy
name: "Deploy to AWS EKS"
language: minimal
before_install:
# Install kubectl
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
- chmod +x ./kubectl
- sudo mv ./kubectl /usr/local/bin/kubectl
# Install AWS CLI
- if ! [ -x "$(command -v aws)" ]; then curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" ; unzip awscliv2.zip ; sudo ./aws/install ; fi
# export environment variables for AWS CLI (using Travis environment variables)
- export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
# Setup kubectl config to use the desired AWS EKS cluster
- aws eks update-kubeconfig --region ${AWS_DEFAULT_REGION} --name ${AWS_EKS_CLUSTER_NAME}
deploy:
- provider: script
# bash script containing the kubectl commands to setup the cluster
script: bash k8s-config/deployment.sh
on:
branch: master
也可以完全避免安装 AWS CLI。然后需要配置kubectl:
kubectl config set-cluster --server= --certificate-authority=
kubectl config set-credentials --client-certificate= --client-key=
kubectl config set-context myContext --cluster= --namespace= --user=
kubectl config use-context myContext
在本地计算机上执行 /.kube/config
命令后,您可以在 aws eks update-kubeconfig
的用户主目录中找到大部分需要的值。
除了客户端证书和密钥。我不知道从哪里获取它们,因此还需要在管道中安装 AWS CLI。