上述脚本的工作基本与流程图的一致,因为 Jenkins 针对 Python 提供了 SDK ,所以原作者使用 Python 来编写的 “代理” 程序。不过 Jenkins 也有 RESTful API,你也可以使用 .NET Core 编写类似的 “代理” 程序。
接着我们来编写 Slave 镜像的 Dockerfile 文件,因为国内服务器访问 Ubuntu 的源很慢,经常因为超时导致构建失败,这里切换成了阿里云的源,其内容如下:
FROM ubuntu:16.04 # 安装 Docker CLI。 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && apt-get clean RUN apt-get update --fix-missing && apt-get install -y apt-transport-https ca-certificates curl openjdk-8-jre python python-pip git # 使用阿里云的镜像源。 RUN curl -fsSL | apt-key add - RUN echo "deb [arch=amd64] xenial stable" > /etc/apt/sources.list.d/docker.list RUN apt-get update --fix-missing && apt-get install -y docker-ce --allow-unauthenticated RUN easy_install jenkins-webapi # 安装 Docker-Compose 工具。 RUN curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose RUN mkdir -p /home/jenkins RUN mkdir -p /var/lib/jenkins # 将 slave.py 文件添加到容器。 ADD slave.py /var/lib/jenkins/slave.py WORKDIR /home/jenkins # 配置 Jenkins Master 的一些连接参数和 Slave 信息。 ENV JENKINS_URL "http://jenkins" ENV JENKINS_SLAVE_ADDRESS "" ENV JENKINS_USER "admin" ENV JENKINS_PASS "admin" ENV SLAVE_NAME "" ENV SLAVE_SECRET "" ENV SLAVE_EXECUTORS "1" ENV SLAVE_LABELS "docker" ENV SLAVE_WORING_DIR "" ENV CLEAN_WORKING_DIR "true" CMD [ "python", "-u", "/var/lib/jenkins/slave.py" ]继续使用 docker build 构建 Slave 镜像:
docker build -t jenkins-slave . 1.3 编写 Docker Compose 文件这里的 Docker Compose 文件,我取名叫 docker-compose.jenkins.yaml ,主要工作是为了启动 Master 和 Slave 容器。
version: '3.1' services: jenkins: container_name: jenkins ports: - '8080:8080' - '50000:50000' image: jenkins-master jenkins-slave: container_name: jenkins-slave restart: always environment: - 'JENKINS_URL=http://jenkins:8080' image: jenkins-slave volumes: - /var/run/docker.sock:/var/run/docker.sock # 将宿主机的 Docker Daemon 挂载到容器内部。 - /home/jenkins:/home/jenkins # 将数据挂载出来,方便后续进行释放。 depends_on: - jenkins执行 Docker Compose 之后,我们通过 宿主机 IP:8080 就可以访问到 Jenkins 内部了,如下图。
二、Gogs 的部署我们内部开发使用的 Git 仓库是使用 Gogs 进行搭建的,Gogs 官方提供了 Docker 镜像,那我们可以直接编写一个 Docker Compose 快速部署 Gogs。