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