jenkins构建
- jenkins运行需要的jdk用docker compose挂载,不构建到镜像中;
- vsftpd.conf文件通过docker compose挂载到容器。
dockerfile
FROM python:3.9.25-bookworm
USER root
WORKDIR /home/work/
ENV JENKINS_HOME=/home/work/jenkins/jenkins_home
ADD ./requirements.txt /home/work/python/requirements.txt
# 更换 apt 源、安装基础工具及 vsftpd
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources && \
apt update && apt upgrade -y && \
apt install -y git curl unzip net-tools vsftpd
# 升级 pip 并安装 Python 依赖
RUN pip3 install --upgrade pip && pip3 install -r /home/work/python/requirements.txt
# 创建 work 用户,设置家目录为 /home/work,密码为 work123
RUN useradd -m -d /home/work -s /bin/bash work && \
echo "work:work123" | chpasswd
# 将 /home/work 及其子目录的所有权赋给 work 用户
RUN chown -R work:work /home/work
# 使用新启动脚本作为 CMD
CMD ["/bin/bash", "/home/work/entrypoint.sh"]
vsftpd.conf
sed -i \
-e 's/anonymous_enable=YES/anonymous_enable=NO/' \
-e 's/#local_enable=YES/local_enable=YES/' \
-e 's/#write_enable=YES/write_enable=YES/' \
-e 's/#local_umask=022/local_umask=022/' \
-e 's/#chroot_local_user=YES/chroot_local_user=YES/' \
/etc/vsftpd.conf && \
echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf && \
echo "pasv_enable=YES" >> /etc/vsftpd.conf && \
echo "pasv_min_port=30000" >> /etc/vsftpd.conf && \
echo "pasv_max_port=31000" >> /etc/vsftpd.conf
entrypoint.sh
#!/bin/bash
mkdir -p /var/run/vsftpd/empty
vsftpd &
/home/work/jdk/openlogic-openjdk-21.0.5+11-linux-x64/bin/java -Dhudson.model.DirectoryBrowserSupport.CSP="" -jar /home/work/jenkins/jenkins.war --httpPort=8086 > /home/work/jenkins/logs/jenkins.log
启动容器
目录结构
.
├── docker-compose.yml
├── entrypoint.sh
├── etc
│ └── vsftpd.conf
├── makedir.sh
├── openlogic-openjdk-21.0.5+11-linux-x64.tar.gz
└── work
├── entrypoint.sh
├── jdk
├── jenkins
└── test
创建目录并解压jdk
makedir.sh
#!/bin/bash
mkdir -p \
./work/test/meizhong_airui/api_case \
./work/test/meizhong_airui/logs \
./work/test/meizhong_airui/reports/allure_raw \
./work/test/meizhong_airui/allure-report \
./work/test/meizhong_airui/data \
./work/jenkins/logs \
./work/jenkins/jenkins_home \
./work/jdk
tar zxvf openlogic-openjdk-21.0.5+11-linux-x64.tar.gz -C work/jdk/
entrypoint.sh
#!/bin/bash
mkdir -p /var/run/vsftpd/empty
vsftpd &
/home/work/jdk/openlogic-openjdk-21.0.5+11-linux-x64/bin/java -Dhudson.model.DirectoryBrowserSupport.CSP="" -jar /home/work/jenkins/jenkins.war --httpPort=8086 > /home/work/jenkins/logs/jenkins.log
docker-compose.yml
services:
jenkins:
image: jenkins_test:1.5
container_name: jenkins-test
restart: always
ports:
- "8086:8086"
- "21:21"
- "16100-16200:16100-16200"
volumes:
- ./work/entrypoint.sh:/home/work/entrypoint.sh:ro
- ./work/jdk:/home/work/jdk
- ./work/jenkins:/home/work/jenkins
- ./work/test:/home/work/test
- ./etc/vsftpd.conf:/etc/vsftpd.conf:ro
command: /bin/bash /home/work/entrypoint.sh