当Jenkins构建启动时,安装了Jenkins的EC2示例将不可用

eufgjt7s  于 2023-04-05  发布在  Jenkins
关注(0)|答案(1)|浏览(196)

我已经用RedHat在AWS EC2示例上安装了Jenkins。安全组被配置为允许所有HTTP和SSH流量。
Jenkins通过docker-compose安装。
当我开始测试作业时,Jenkins可以从GitHub存储库中克隆代码,并从存储库中存在的Jenkinsfile执行shell命令。
当我尝试使用maven build启动作业时,EC2示例变得不可用:我无法通过SSH连接它,不是从我的终端,也不是通过AWS连接。在AWS控制台上,示例健康状况显示为“健康”。EC2示例重新启动没有帮助。
你知道我可能做错什么吗?
这是我的博客

version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports: 
      - "80:8080"
    volumes: 
      - "$PWD/jenkins_home:/var/jenkins_home"
    networks:
      - net 
networks:
  net:

创建jenkins_home,尝试将$PWD更改为完整路径。
Jenkins可以从Github下载代码,所以据我所知,问题不在安全组中。
将尝试安装Jenkins而不使用docker-compose,但无论如何都想找出这个问题的原因。
谢谢大家。

一些额外的信息Przemysław Puchajda回答
问题的原因是EC2示例资源耗尽,正如Przemysław Puchajda所说。
在我的例子中,我通过配置交换文件解决了这个问题。交换文件是磁盘上的一个空间,当物理RAM内存满时会使用它。
1.在Jenkins中检查Manage JenkinsManage Nodes and Clouds如果你看到内置节点的自由交换空间为0,这意味着Jenkins没有交换文件的访问权。如果交换文件或交换分区没有配置,或者Jenkins在docker中以非特权模式运行,可能会出现这种情况。

1.检查主机上是否配置了交换区:free | grep -i Swap如果结果为Swap: 0 0 0,则未配置交换。
1.配置交换文件

sudo fallocate -l 2G /swapfile #set your size instead of 2G
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo vi /etc/fstab
paste a line : /swapfile swap swap defaults 0 0
#check swap is configured 
sudo free -h

1.确保docker-compose.yml在services:jenkins下有privileged: true行。我在下面添加了一个完整的docker-compose.yml。
1.重新启动容器:

sudo docker compose down 
#sudo docker-compose down for old version of docker 
sudo docker compose up -d

我的docker-compose.yml(特权模式):

version: "3.8"
services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true
    user: root
    ports:
      - 8080:8080
      - 50000:50000
    container_name: jenkins
    volumes:
      - /home/ec2-user/jenkins_compose/jenkins_configuration:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
  agent:
    image: jenkins/ssh-agent:jdk11
    privileged: true
    user: root
    container_name: agent
    expose:
      - 22
    environment:
      - JENKINS_AGENT_SSH_PUBKEY=your_private_key_for_ssh_connection
3duebb1j

3duebb1j1#

如果检查Jenkins日志不是一个选项(示例挂起)-在运行构建之前尝试登录到示例并tail -f /var/log/messages and docker logs -f,并跟踪它停止响应的时刻。将时间与cloudwatch日志相关联-没有cloudwatch代理,您将无法检查内存度量,这可能是此处问题的路由原因-因此请考虑先安装CloudWatch代理。
出现这种情况的唯一原因是EC2示例资源耗尽-示例变得无法运行,在大多数情况下,这不会影响控制台下的示例健康状态,或者在一段时间后会影响。这是因为检查是通过定期向示例的IP地址和端口号发送TCP请求来工作的。如果示例以成功状态码响应请求,则不会影响控制台中的状态健康。在大多数情况下,示例仍会响应TCP,但您将无法登录该示例。
确认示例资源没有饱和-在作业过程中-如果是-调整示例大小或考虑将jenkins卸载到另一个ec2,可选地切换做aws codebuild。

相关问题