amazon-web-services - 在Jenkins中的Docker容器中运行命令

标签 amazon-web-services docker jenkins jenkins-pipeline

目前,我正在尝试在jenkins中运行一个容器,以调用aws ecr以查找最新图像。为此,我需要设置aws configure参数,但是由于容器未以USER命令的身份作为root用户运行,这让我不知所措,原因是它不起作用。

但是,每当我运行容器时,都会收到以下消息

+ docker inspect -f . mikesir87/aws-cli
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:114 -w /var/lib/jenkins/workspace/xxxx@2 -v /var/lib/jenkins/workspace/xxxx@2:/var/lib/jenkins/workspace/xxxx@2:rw,z -v /var/lib/jenkins/workspace/xxxx@2@tmp:/var/lib/jenkins/workspace/xxxx@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** mikesir87/aws-cli cat
$ docker top de3435a8a54f6afa42f8136a57ec67b2720c655328f1aadc0addeb412a92240f -eo pid,comm
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ pwd
/var/lib/jenkins/workspace/xxxx@2
[Pipeline] sh
+ aws configure set aws_access_key_id key
[Errno 13] Permission denied: '/.aws'

我不明白的是,如果我尝试从bash启动此容器,我不会收到此权限被拒绝的错误。参见下面的jenkinsfile
        stage('Check Container Version')
        {
            agent
            {
                docker { image 'mikesir87/aws-cli' }
            }
            steps
            {
                script
                {
                    sh '''pwd'''
                    sh ''' aws configure set aws_access_key_id key'''

                }
            }
        }

该容器是从docker hub抓取的,下面是dockerfile
FROM python:alpine

ARG CLI_VERSION=1.18.37

RUN apk -uv add --no-cache groff jq less && \
    pip install --no-cache-dir awscli==$CLI_VERSION

WORKDIR /aws

CMD sh

最佳答案

在Jenkins Pipeline中作为Docker代理执行时,该容器实际上并未在root用户内部运行。您可以在上面的管道输出中注意到:

docker run -t -d -u 112:114 ...



由于您要通过使用root用户来运行容器来解决权限问题,因此可以修改代理参数以允许这样做:
agent {
  docker { image 'mikesir87/aws-cli'
           args '-u root:root' 
  }
}

然后您的容器用户应具有AWS配置所需的权限。

关于amazon-web-services - 在Jenkins中的Docker容器中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61101364/

相关文章:

mysql - Redshift 的 COPY 命令可以复制多个表吗?

amazon-web-services - 如何在 AWS SAM 模板中包含 CloudWatch 组和流?

linux - 在 Docker Alpine 容器中启动 shell

windows - Docker for Windows beta 中的虚拟机磁盘空间

jenkins - 声明式 Jenkins Pielines 在 SCM 结帐之前运行命令

jenkins - 访问CVS时如何使用Jenkins凭证存储?

e-commerce - 如何按项目获取、显示亚马逊商城列表?

php - 带有 AWS presignedURL 的 PUT 文件

docker - 具有docker-compose,LetsEncrypt和多个域的Traefik

node.js - root 在项目目录中找不到 gulp 命令