拉取jenkins镜像
bash
docker pull jenkins/jenkins:2.468-jdk21
创建一个文件夹,用于二次打包jenkins镜像
bash
mkdir -p /data/jenkins
cd /data/jenkins
提前准备好jdk和maven,并放到/data/jenkins下
由于3.8.x以上版本的maven只支持https协议,我们需要覆盖原有的settings.xml,让它支持http
准备settings.xml,文件内容如下
XML
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
</settings>
我们需要将镜像进行二次打包,把我们所需要的东西都加进去,新建Dockerfile
bash
FROM jenkins/jenkins:2.468-jdk21
EXPOSE 8080
# 将maven和jdk添加到容器中
# tar.gz添加进去后会自动解压,无需手动解压
ADD apache-maven-3.9.8-bin.tar.gz /usr/local
ADD jdk-8u421-linux-x64.tar.gz /usr/local
# 覆盖容器里的settings.xml
ADD settings.xml /usr/local/apache-maven-3.9.8/conf/
ENV TZ=Asia/Shanghai
ENV M2_HOME=/usr/local/apache-maven-3.9.8
# 配置java和maven的环境变量
ENV PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH
提前创建好jenkins_home,并授予最高权限
bash
mkdir jenkins_home
chmod +777 jenkins_home
现在/data/jenkins下就会有这么几个文件
进行二次打包
bash
docker build -t jenkins .
打包后,就能看到我们打包后的镜像
如果jenkins容器里想使用docker命令,需要提前授予docker权限
bash
chmod +777 /var/run/docker.sock
然后我们把容器运行起来吧
bash
docker run -d --name jenkins \
-p 0.0.0.0:8080:8080 \
-v /data/jenkins/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins
访问你的ip地址:8080即可看到jenkins的首页
获取密码
bash
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
看到这个页面后,安装推荐的插件即可
等待插件安装完成
安装完成后会弹出以下页面,使用admin账户登陆就可以了
进入Jenkins后,到security,修改管理员密码
修改成你想要的密码
进入插件管理
搜索nodejs插件,进行安装
进入工具配置
配置jdk的路径,点击新增jdk,别名随便填,JAVA_HOME就是容器中jdk的路径,刚刚在Dockerfile添加进来的路径
配置node路径,点击新增NodeJS,别名随便填,勾选自动安装,版本号选择你想要的版本号,保存即可
开始测试
新建一个项目
任务名称随便填,选择流水线
找到流水线,输入测试脚本,保存
脚本如下
Groovy
pipeline {
agent any
tools {
jdk 'jdk8'
nodejs 'node11.0.0'
}
stages {
stage('test') {
steps {
script {
sh """
docker -v
java -version
mvn -v
node -v
npm -v
"""
}
}
}
}
}
点击立即构建
这里会显示构建状态
点进去,然后点击Console Output,可以看到构建时,控制台的输出
在控制台中即可看到刚刚打印的版本号