popyone
Published on 2026-05-15 / 2 Visits
0
0

Docker 快速部署 Jenkins + Ftp

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 

Comment