Jenkins ECS 和 EFS 出错

Posted

技术标签:

【中文标题】Jenkins ECS 和 EFS 出错【英文标题】:Error with Jenkins ECS and EFS 【发布时间】:2017-10-02 21:32:24 【问题描述】:

我正在尝试使用 Jenkins 部署到带有 EFS 的 ECS。 (/var/jenkins_home 已挂载)

看起来一切都很好,除了当我部署服务时,我在日志中收到以下错误:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
No newer events found at the moment. Retry.

有没有办法解决这个问题,所以我对/var/jenkins_home 有足够的权限?

【问题讨论】:

【参考方案1】:

对我有用的是创建 efs 的访问点: https://github.com/aws-samples/serverless-jenkins-on-aws-fargate/blob/main/modules/jenkins_platform/efs.tf

这是我基于上述来源的简化解决方案:

resource "aws_efs_file_system" "jenkins" 
  creation_token = "jenkins"
  encrypted      = true

  lifecycle_policy 
    transition_to_ia = "AFTER_30_DAYS"
  
  tags = 
    Name = "jenkins"
  


resource "aws_efs_access_point" this 
  file_system_id = aws_efs_file_system.jenkins.id

  posix_user 
    gid = 0
    uid = 0
  
  root_directory 
    path = "/"
    creation_info 
      owner_gid   = 1000 # jenkins
      owner_uid   = 1000 # jenkins
      permissions = "755"
    
  
  tags = 
    Name = "root"
  

理想情况下,您想使用此模块或将其分叉并制作您自己的模块。

【讨论】:

【参考方案2】:

只是添加@jonathan 回答创建一个新的 docker 文件,它会像这样覆盖 jenkins 官方图像

from jenkins/jenkins

USER root


RUN chown -R 1000 /var

创建新的 docker 映像 docker build . 这将创建一个新的 docker 映像,该映像不再受到 EFS 权限问题的影响。

【讨论】:

【参考方案3】:

是的,这有点疯狂,但一个简单的解决方案就是在您的 efs 文件位置运行 chown 命令。例如,如果 '/efs' 是您的 EFS 挂载,则简单运行 sudo chown 1000 efs/

应该在之后就可以正常工作

【讨论】:

以上是关于Jenkins ECS 和 EFS 出错的主要内容,如果未能解决你的问题,请参考以下文章

ECS CLI - 启动容器实例时挂载 EFS

ECS 中的 EFS 挂载“无法解决”

在 ECS 中附加卷 EFS

我们可以在 AWS ECS docker 容器上挂载 EFS 吗?

用于挂载EFS存储的ECS容器实例的引导用户数据

EFS 卷绑定在 ECS 任务定义的每个“terraform apply”上自动分离/重新附加