docker pull jenkins之后是只有单纯的jenkins镜像,没有jdk,maven,docker宿主机的命令挂载,导致jenkins 在编译java项目的时候报各种错误。
本地下载maven对应版本
链接:
mavne和jdk
提取码:0814
本地下载jdk对应版本
解压maven并通过上传到服务器指定目录
解压完之后修改mavenconfig里面的setting.xml文件,把里面的仓库源改为阿里的
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
解压jdk并通过上传到服务器指定目录
通过docker cp 命令把宿主机的本地文件copy到容器指定路径
docker cp /usr/maven3.6.1 jenkins:/usr/maven.3.6
docker cp /usr/jdk1.8 jenkins:/usr/jdk1.8
copy之后进入容器内部查看
docker exec -it jenkins /bin/bash
可能会报没有权限的错误
chown -R 1000:1000 /home/jenkins #看你给jekins的权限是777还是什么,修改对应用户的权限就可以
在jenkins 里面无法使用宿主机docker 命令
docker cp /var/run/docker.sock jenkins:/var/run/docker.sock /usr/bin/docker jenkins:/usr/bin/docker
chmod a+rw /var/run/docker.sock #如果有权限问题可以执行这个
如果cp命令没有效果的话,可以stop停止当前容器,并重新run,并挂载宿主机的docker.sock命令
docker run --privileged --name='test_triton_jason' -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -itd your-images bash
执行完这些,我们可以看到我们的jenkins是可以编译java项目了。
JAVA_HOME M2_HOME PATH+EXTRA
配置完成之后执行你自己的流水线就能成功跑起来了。
注 jenkins 构建时间显示错误问题
在里面添加下面这句话就可以了。
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
将dockerfile和sources.list、settings.xml这三文件都放到:/opt/jenkins文件夹下。
settings.xml:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
pluginGroups>
<proxies>
proxies>
<servers>
servers>
<mirrors>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
<profiles>
profiles>
settings>
sources.list:
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
dockerfile
FROM jenkins/jenkins:lts-jdk11
USER root
COPY sources.list /etc/apt/sources.list
# 安装maven
RUN apt-get update && apt-get install -y wget && cd /opt && wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz && tar -zxvf apache-maven-3.6.3-bin.tar.gz
COPY settings.xml /opt/apache-maven-3.6.3/conf/settings.xml
# 加载全局变量
RUN echo "export MAVEN_HOME=/opt/maven/apache-maven-3.6.3">>/etc/profile && echo "export MAVEN_HOME">>/etc/profile && echo 'export PATH=$PATH:$MAVEN_HOME/bin'>>/etc/profile && ln -s /opt/maven/apache-maven-3.6.3/bin/mvn /usr/bin/
# 安装jdk1.8.0_201
RUN cd /opt && wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz && tar -zxvf jdk-8u201-linux-x64.tar.gz
RUN echo 'export JAVA_HOME=/opt/jdk1.8.0_201'>>/etc/profile && echo 'export JRE_HOME=\${JAVA_HOME}/jre'>>/etc/profile && echo 'export CLASSPATH=.:\${JAVA_HOME}/lib:\${JRE_HOME}/lib'>>/etc/profile && echo 'export PATH=\${JAVA_HOME}/bin:\$PATH'>>/etc/profile
RUN /bin/bash -c "source /etc/profile"
USER jenkins
build镜像
[root@centos jenkins]# docker build -f dockerfile .
[root@centos jenkins]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> da60997e77e4 8 minutes ago 1.11GB
[root@centos jenkins]# docker tag da60997e77e4 my-jenkins
运行容器
[root@centos jenkins]# docker volume create jenkins-volume
[root@centos jenkins]# docker run -d --name jenkins -u root -p 8888:8080 -p 50000:50000 --privileged=true -v jenkins-volume:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker my-jenkins:latest
然后就是初始化jenkins
接着配置环境变量就可以了。