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

黏土鳍

简单的目标:

我想在本地计算机上同时运行两个容器。jenkins容器一SSH server容器。然后,jenkins job可以连接到SSH服务器容器并执行aws命令以将文件上传到S3。

我的工作空间目录结构:

  • 一个docker-compose.yml(详细信息请参见下文)
  • 名为的目录centos/
  • 在内部,centos/我有一个Dockerfile用于构建SSH服务器映像。

docker-compose.yml:

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

  • 一个詹金斯容器,名字jenkins
  • 一个SSH服务器配置,名为remote_host
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 CLI):

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 up这两个jenkins容器和remote_host(SSH服务器)容器启动并成功运行。

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

$ docker exec -it jenkins bash
jenkins@7551f2fa441d:/$ 

我可以通过以下方式成功将ssh放到remote_host容器中:

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访问密钥和秘密密钥~.aws/credentials

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

我可以成功运行aws命令,将文件从remote_host容器上传到我的AWS S3存储桶。喜欢:

[remote_user@8c203bbdcf72 ~]$ aws s3 cp myfile s3://mybucket123asx/myfile

问题是什么

现在,我希望我的詹金斯工作执行aws命令以将文件上传到S3。所以我在remote_host容器内创建了一个shell脚本,该脚本是这样的:

#/bin/bash
BUCKET_NAME=$1
aws s3 cp /tmp/myfile s3://$BUCKET_NAME/myfile

在我的jenkins中,我已经配置了SSH&在我的jenkins作业配置中,我有:

在此处输入图片说明

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

构建jenkins作业时,总是在console:中收到错误upload failed: ../../tmp/myfile to s3://mybucket123asx/myfile Unable to locate credentials

为什么在remote_host容器中执行时,相同的s3命令有效,但从jenkins作业中运行时却无效?

我还尝试在脚本中显式导出aws key id和secret key。(请记住,我在中~.aws/credentils配置了remote_host,但无需显式导出aws密钥即可工作)

#/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
黏土鳍

好的,我通过将export陈述改为大写字母来解决了我的问题因此,问题的原因在于,当詹金斯(Jenkins)运行脚本时,其运行方式remote_user与相同remote_host虽然在remote_host我有~/.aws/credentials安装程序,但是该文件仅具有以下用户的读取权限root

[root@8c203bbdcf72 /]# ls -l ~/.aws/
total 4
-rw-r--r-- 1 root root 112 Sep 25 19:14 credentials

这就是为什么詹金斯运行脚本将文件上传到S3时Unable to locate credentials失败的原因。由于凭据文件无法被读取remote_user因此,我仍然必须取消注释导出aws key id和secret key的行。@Marcin的评论对字母必须为大写字母很有帮助,否则将不起作用。

因此,总的来说,我要解决的问题是使用以下命令更新脚本:

export aws_access_key_id=AKAARXL1CFQNN4UV5TIO
export aws_secret_access_key=MY_SECRETE_KEY

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

npm运行脚本不起作用

通过Windows Scheduler运行python脚本不起作用

Bash脚本运行备份并上传到AWS S3失败

无法使用 Python 脚本和通配符将多个文件上传到 AWS S3

使用'#!/ bin / sh'运行脚本时,该脚本不起作用

运行脚本以通过Bash将数据库模式导入PostgreSQL

将文件上传到 s3 php 脚本

需要 NSIS 示例脚本以及运行脚本所需的所有文件

通过SSH进入我的Vagrant虚拟机以运行python脚本...但是除非我在VM本身中,否则python脚本不起作用

基本的Cron作业,用于运行Shell脚本以将日期追加到日志中,但不起作用

macOS automator-运行shell脚本不起作用

AJAX(jquery)运行PHP脚本不起作用

通过 PHP 运行时,工作 Python 脚本不起作用

从 PHP 调用的 Shell 脚本不起作用,但可以在命令行中运行

配置 ec2 以运行脚本以从 sftp 站点下载文件?

Python-如何连续运行脚本以在Windows目录中查找文件

使用boto3从Powershell远程运行python脚本不起作用

如何将文件导入 Tkinter 并运行脚本?

无法通过PHP文件上传将文件上传到AWS

Cron作业脚本不起作用

Realm Swift 0.92.3“运行脚本阶段”不起作用

npm运行脚本流不起作用

第一次使用getopts运行脚本,但是第二次运行不起作用

执行脚本以在文件中观看

运行脚本以在终端中调用命令

在Dockerfile中运行脚本以添加别名

从qmake运行脚本以获取内部版本号

Linux运行脚本以配置首次启动和安装

运行脚本以使用HSQLDB创建表