首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行脚本将文件上传到AWS S3工作,但是通过jenkins作业运行相同的脚本不起作用

运行脚本将文件上传到AWS S3工作,但是通过jenkins作业运行相同的脚本不起作用
EN

Stack Overflow用户
提问于 2020-09-27 07:24:25
回答 1查看 978关注 0票数 2

简单目标:

我想让两个集装箱都在我的本地机器上运行。一个jenkins容器和一个SSH server容器。然后,jenkins作业可以连接到SSH服务器容器&执行aws命令将文件上传到S3。

我的工作区目录结构:

  • a docker-compose.yml (详见下文)
  • --一个名为centos/
  • I centos/的目录I有一个Dockerfile用于构建SSH服务器映像。H 216f 217

The docker-compose.yml:

在我的docker-compose.yml中我声明了两个容器(服务)。

名为jenkins.

  • One SSH server contaienr,名为remote_host.

  • jenkins容器

代码语言:javascript
运行
复制
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
    volumes:
      - $PWD/jenkins_home:/var/jenkins_home
    networks:
      - net

  remote_host:
    container_name: remote_host
    image: remote-host
    build: 
      context: centos7
    networks:
      - net
networks:
  net:

用于Dockerfileremote_host如下所示(注意最后一个RUN安装AWS ):

代码语言:javascript
运行
复制
FROM centos

RUN yum -y install openssh-server

RUN useradd remote_user && \
    echo remote_user:1234 | chpasswd && \
    mkdir /home/remote_user/.ssh && \
    chmod 700 /home/remote_user/.ssh

COPY remote-key.pub /home/remote_user/.ssh/authorized_keys

RUN chown remote_user:remote_user -R /home/remote_user/.ssh/ && \
    chmod 600 /home/remote_user/.ssh/authorized_keys

RUN ssh-keygen -A
RUN rm -rf /run/nologin

RUN yum -y install unzip

RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && unzip awscliv2.zip && ./aws/install

当前的情况与上述设置:

我负责docker-compose builddocker-compose upjenkins容器和remote_host(SSH服务器)容器都已启动并成功运行。

I 可以通过以下方式进入jenkins容器:

代码语言:javascript
运行
复制
$ docker exec -it jenkins bash
jenkins@7551f2fa441d:/$ 

I可以通过以下方法成功地将ssh传递到remote_host容器:

代码语言:javascript
运行
复制
jenkins@7551f2fa441d:/$ ssh -i /tmp/remote-key remote_user@remote_host
Warning: the ECDSA host key for 'remote_host' differs from the key for the IP address '172.19.0.2'
Offending key for IP in /var/jenkins_home/.ssh/known_hosts:1
Matching host key in /var/jenkins_home/.ssh/known_hosts:2
Are you sure you want to continue connecting (yes/no)? yes
[remote_user@8c203bbdcf72 ~]$ 

remote_host容器中,我还在~.aws/credentials下配置了AWS访问密钥和密钥

代码语言:javascript
运行
复制
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

,我可以成功地运行命令,将文件从remote_host容器上传到aws S3桶。比如:

代码语言:javascript
运行
复制
[remote_user@8c203bbdcf72 ~]$ aws s3 cp myfile s3://mybucket123asx/myfile

这个问题是什么

现在,我想让我的jenkins工作执行aws命令,将文件上传到S3。所以我在我的remote_host容器中创建了一个shell脚本,脚本如下所示:

代码语言:javascript
运行
复制
#/bin/bash
BUCKET_NAME=$1
aws s3 cp /tmp/myfile s3://$BUCKET_NAME/myfile

在我的jenkins中,我配置了SSH &在我的jenkins职务配置中,我有:

如您所见,它只是运行位于remote_host容器中的脚本。

当我构建jenkins作业时,我总是在控制台中得到错误:upload failed: ../../tmp/myfile to s3://mybucket123asx/myfile Unable to locate credentials

为什么相同的s3命令在remote_host容器中执行时工作,而在从jenkins作业运行时却不能工作?

我还尝试在脚本中显式地导出aws键id & secrete键。(请记住,我在~.aws/credentils中配置了remote_host,它可以不显式导出aws密钥)

代码语言:javascript
运行
复制
#/bin/bash
BUCKET_NAME=$1
export aws_access_key_id=AKAARXL1CFQNN4UV5TIO
export aws_secret_access_key=MY_SECRETE_KEY
aws s3 cp /tmp/myfile s3://$BUCKET_NAME/myfile
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-29 20:32:03

好的,我通过将export语句改为大写案例来解决我的问题。因此,问题的原因是,当jenkins运行脚本时,它以remote_user形式在remote_host上运行。虽然在remote_host上有~/.aws/credentials设置,但该文件仅对root以外的用户具有读取权限。

代码语言:javascript
运行
复制
[root@8c203bbdcf72 /]# ls -l ~/.aws/
total 4
-rw-r--r-- 1 root root 112 Sep 25 19:14 credentials

这就是为什么当jenkins运行脚本将文件上传到S3时,Unable to locate credentials失败了。因为remote_user无法读取凭据文件。因此,我仍然必须取消导出aws密钥id和机密密钥的行。@Marcin的评论很有帮助,因为这些字母必须是大写字母,否则就行不通了。

所以,总的来说,我为解决这个问题所做的就是用以下内容更新我的脚本:

代码语言:javascript
运行
复制
export aws_access_key_id=AKAARXL1CFQNN4UV5TIO
export aws_secret_access_key=MY_SECRETE_KEY
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64085932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档