1、制作 jenkins 镜像 内含(jdk maven git node docker 环境)

1、准备 jdk maven node 包

1、jdk1.8.0_192-amd64.tar.gz

2、apache-maven-3.6.3-bin.tar.gz

3、node-v10.15.3-linux-x64.tar.gz

2、准备jenkins 基础镜像

官方提供的 jenkins 镜像(内含jdk git 环境):


jenkins/jenkins:latest


当安装node 和maven 环境后 jdk 环境就莫名不生效了,所以又重新配置了jdk 环境

3、开始制作jenkins镜像配置jdk maven node ,sudo docker 环境

1、开始使用伪命名进入容器内部配置所需环境 (这里指定以root 用户权限)


docker run -it -u root jenkins/jenkins:latest /bin/bash


2、进入后开始配置所需环境 在容器外部操作 将宿主机上的 jdk maven node 包 复制到 此容器内部

docker cp 宿主机路径 容器id:容器内部路径

jdk


docker cp /root/wenjian/java/jdk1.8.0_192-amd64 4b6b584c63e0:/usr/bin/jdk1.8.0_192-amd64


maven


docker cp /root/wenjian/maven/apache-maven-3.6.3 4b6b584c63e0:/usr/bin/apache-maven-3.6.3


node


docker cp /root/wenjian/npm/node-v10.15.3-linux-x64 4b6b584c63e0:/usr/bin/node-v10.15.3-linux-x64


3、宿主机文件拷贝成功之后 开始配置环境变量

在容器内部操作

jdk


echo " ">>/etc/profile
echo "# Made for jdk env by hegs on $(date +%F)">>/etc/profile
echo 'export JAVA_HOME=/usr/bin/jdk1.8.0_192-amd64'>>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile
echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.ja'>>/etc/profile


node


echo " ">>/etc/profile
echo "# Made for npm env by hegs on $(date +%F)">>/etc/profile
echo 'NODE_HOME=/usr/bin/node-v10.15.3-linux-x64'>>/etc/profile
echo 'export NODE_HOME'>>/etc/profile
echo 'export PATH=${PATH}:${NODE_HOME}/bin'>>/etc/profile


maven


echo " ">>/etc/profile
echo "# Made for maven env by hegs on $(date +%F)">>/etc/profile
echo 'export MAVEN_HOME=/usr/bin/apache-maven-3.6.3'>>/etc/profile
echo 'export PATH=$MAVEN_HOME/bin:$PATH'>>/etc/profile


4、环境变量配置完成之后执行命名即时生效环境变量与验证

1、开始即时刷新配置文件


source /etc/profile


2、由于每次启动容器后都需要进入到容器内部手动执行 source /etc/profile 命令 进行刷新配置文件,否则配置的环境变量将不能够生效

所以需要执行以下命令解决


echo " ">>~/.bashrc echo 'source /etc/profile'>>~/.bashrc


3、验证环境变量配置是否成功


java -verison node -v mvn -v git


4、安装sudo 命令 和配置 sudo docker 命令

1、查看当前容器内的内核版本

可以使用cat命令查看容器版本。

cat 命令用于连接文件并打印到标准输出设备上。

具体命令如:


root@0201d7e11f88:/# cat /etc/issue Debian GNU/Linux 11 \n \l


通过查看容器版本查看和配置对应的镜像加速地址 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区

2、配置 Debian 镜像加速地址

先备份文件/etc/apt/sources.list

cp /etc/apt/sources.list /etc/apt/sources.list.bak 如果出错可以还原: cp /etc/apt/sources.list.bak /etc/apt/sources.list

2.1、添加镜像地址


echo 'deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib'>>/etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib'>>/etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/debian-security/ bullseye-security main'>>/etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main'>>/etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib'>>/etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib'>>/etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib'>>/etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib'>>/etc/apt/sources.list


镜像修改后一定要更新


apt-get update


安装 sudo 命令


apt-get install sudo


接下来配置 sudo docker 命令


chmod u+w /etc/sudoers       # 给 /etc/sudoers 设置可以修改的权限         
vim /etc/sudoers
chmod u-w /etc/sudoers       #修改完成过后恢复原来的权限

# 打开 /etc/sudoers 文件,找到 "secure_path" 一行 添加docker环境变量
vim  /etc/sudoers


4、制作jenkins 镜像成功以后需要重新上传(commit)为一个新的镜像

使用命令进行上传提交新制作的jenkins 镜像


docker commit be796f0a29b1 rxl.hub:5000/rxlcloud/jenkins:1.0


上传提交以后查看是否有提交的镜像


docker images


5、commit 成功后开始 运行jenkins

1、需要写dockerfile 重新制作的jenkins 镜像需要指定运行命令

执行 vim jenkins.Dockerfile

jenkins.Dockerfile


FROM rxl.hub:5000/rxlcloud/jenkins:1.0 MAINTAINER rxl ENTRYPOINT ["/sbin/tini","--","/usr/local/bin/jenkins.sh"]


ENTRYPOINT 中的指令根据上面官方提供的jenkins/jenkins 基础镜像决定 可通过 docker inspect 查看

2、开始根据jenkins.Dockerfile 构建镜像

docker build -t rxl.hub:5000/rxlcloud/jenkins-running:1.0 -f jenkins.Dockerfile .

3、构建成功开始运行此镜像

并且映射了宿主机的docker环境(宿主机 which docker 查看) 所以此jenkins 也可以使用docker 命令


docker run -d -p 8081:8080 -p 50000:50000 -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /jenkins:/var/jenkins_home rxl.hub:5000/rxlcloud/jenkins-running:1.0


会将 jenkins_home 挂载到此宿主机的 /jenkins 目录

6、访问jenkins

101.132.174.238:8081

1、进入jenkins 页面后需要勾选此按钮 否侧会报跨域请求错

2、jenkins 配置jdk maven node 环境变量


JAVA_HOME
/usr/bin/jdk1.8.0_192-amd64

MAVEN_HOME
/usr/bin/apache-maven-3.6.3

使用 echo $PATH 查看path 值 
PATH               
/usr/bin/jdk1.8.0_192-amd64/bin:/usr/bin/apache-maven-3.6.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/node-v10.15.3-linux-x64/bin


配置完成后可以通过流水线正常测试 jdk maven node 环境变量是否正常


pipeline { agent any stages { stage('Hello') { steps { sh 'java -version' } } } }


2、通过jenkins-base.tar 搭建jenkins

解压jenkins-base.tar 默认


docker load -i jenkins-base.tar


查看解压镜像


docker images


由于是使用了宿主机上的docker命令,所以需要根据宿主机上的docker 环境 进行配置 docker 映射路径(docker run 时指定)、sudo docker 命令

进入解压后的容器内部:docker run -it 镜像id /bin/bash


查看 sudo docker 命令的配置 是否和宿主机上的docker 环境一致


查看配置 sudo docker 命令 (默认配置 /usr/bin/docker,如果不一致需要修改)


cat  /etc/sudoers  
打开 /etc/sudoers 文件,找到 "secure_path" 一行 查看配置宿主机docker环境变量是否正确

Defaults   secure_path = /usr/bin/docker:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/root/bin:/root/bin

可以在宿主机上使用which docker 查看docker 环境变量  
[root@iZuf6go6c07h3qmelx3lapZ ~]# which docker
/usr/bin/docker


如果不一致需要重新配置 /etc/sudoers


chmod u+w /etc/sudoers       # 给 /etc/sudoers 设置可以修改的权限         
vim /etc/sudoers
chmod u-w /etc/sudoers       #修改完成过后恢复原来的权限

# 打开 /etc/sudoers 文件,找到 "secure_path" 一行 添加docker环境变量
vim  /etc/sudoers


如果配置不一致修改后配置完成,需要重新构建这个基础镜像


docker commit 容器id 镜像名称:tag docker commit 容器id rxl.hub:5000/rxlcloud/jenkins-base:2.0


通过jenkins.Dockerfile构建 jenkins 新镜像


docker build -t rxl.hub:5000/rxlcloud/jenkins-running:1.0 -f jenkins.Dockerfile .


jenkins.Dockerfile


FROM rxl.hub:5000/rxlcloud/jenkins-base:2.0 MAINTAINER rxl ENTRYPOINT ["/sbin/tini","--","/usr/local/bin/jenkins.sh"]


开始运行jenkins 并且映射了宿主机的docker环境 (根据宿主机docker环境 来映射) 所以此jenkins 也可以使用docker 命令


docker run -d -p 8081:8080 -p 50000:50000 -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /jenkins:/var/jenkins_home rxl.hub:5000/rxlcloud/jenkins-running:1.0


访问步骤同上配置jenkins 步骤同上

npm切换访问源地址,以及node-sass安装

修改下载地址为淘宝镜像


npm config set registry https://registry.npm.taobao.org/


设置node-sass地址的变量


npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/


Docker时区不一致问题 本地时间相差8个小时

容器内部创建Asia时区文件


echo Asia/Shanghai >/etc/timezone


1、复制Shanghai 时间文件到docker容器下


docker cp /usr/share/zoneinfo/Asia/Shanghai 【容器ID】:/etc/localtime


2、重启docker容器


docker restart 【容器ID】


时区问题:

1.docker-compose配置卷挂载


volumes: - /usr/share/zoneinfo/Asia/Shanghai : /etc/localtime


2.Dockerfile运行命令以及输出对应时区到timezone中


RUN echo "Asia/shanghai" > /etc/timezone RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime