在进行Devops思想与方法论落地的过程中,Jenkins这个开源的软件基本上会成为我们的首选,因为它的成熟度以及插件的丰富程度都无法让我们拒绝它。而随着Jenkins 2.0的发布,Pipeline As Code的理念,无疑给Jenkins使用者在Devops落地过程中更加得心应手。
Devops盛行之下,Docker无疑慢慢成为我们应用部署方式的首选,Docker在效率、隔离型、移植性、复用性相对传统的虚拟机部署优势都很明显。
Devops工具链的容器化在Devops整体体系的更快更简单地落地都起着至关重要的作用。下面就介绍Jenkins的容器化,包括Jenkins Master容器化、Jenkins Slave 容器化以及使用Jenkins的Docker Cloud 插件进行Slave的云部署。以及对于Jenkins容器化后内置构建环境安装以及软件环境,包括maven、ruby、python、golang、ruby、php、dotnet、git、docker、nodejs、ant等等。
以下所有的文件代码都可以在Github找到:
https://github.com/zbbkeepgoing/containerization
1、Jenkins Master
Jenkins的Master镜像构建。首先如果我们需要用我们的Jenkins来作为Devops持续构建和持续部署的工具,那对应的构建不同语言应用的环境那也是必须要构建到我们Master的镜像中。下面就是Jenkins Master的Dockerfile部分文件内容(由于文件内容过长,只黏贴一部分,所有内容可以查看上面笔者的Github地址)。
...
...
# Install NodeJs 10.x , if you don't need, you can remove it,you also can change version
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get update && apt-get install -y \
nodejs
# Install Python3.7 , if you don't need, you can remove it ,you also can change version
RUN wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
RUN tar xvf Python-3.7.0.tgz
RUN rm -rf Python-3.7.0.tgz
RUN cd Python-3.7.0 \
./configure --enable-optimizations \
make -j8 \
make altinstall
# Install Golang1.10.3 , if you don't need, you can remove it,you also can change version
ENV GOLANG_VERSION 1.10.3
RUN set -eux; \
\
# this "case" statement is generated via "update.sh"
dpkgArch="$(dpkg --print-architecture)"; \
case "${dpkgArch##*-}" in \
amd64) goRelArch='linux-amd64'; goRelSha256='fa1b0e45d3b647c252f51f5e1204aba049cde4af177ef9f2181f43004f901035' ;; \
armhf) goRelArch='linux-armv6l'; goRelSha256='d3df3fa3d153e81041af24f31a82f86a21cb7b92c1b5552fb621bad0320f06b6' ;; \
arm64) goRelArch='linux-arm64'; goRelSha256='355128a05b456c9e68792143801ad18e0431510a53857f640f7b30ba92624ed2' ;; \
i386) goRelArch='linux-386'; goRelSha256='3d5fe1932c904a01acb13dae07a5835bffafef38bef9e5a05450c52948ebdeb4' ;; \
ppc64el) goRelArch='linux-ppc64le'; goRelSha256='f3640b2f0990a9617c937775f669ee18f10a82e424e5f87a8ce794a6407b8347' ;; \
s390x) goRelArch='linux-s390x'; goRelSha256='34385f64651f82fbc11dc43bdc410c2abda237bdef87f3a430d35a508ec3ce0d' ;; \
*) goRelArch='src'; goRelSha256='567b1cc66c9704d1c019c50bef946272e911ec6baf244310f87f4e678be155f2'; \
echo >&2; echo >&2 "warning: current architecture ($dpkgArch) does not have a corresponding Go binary release; will be building from source"; echo >&2 ;; \
esac; \
\
url="https://golang.org/dl/go${GOLANG_VERSION}.${goRelArch}.tar.gz"; \
wget -O go.tgz "$url