一、前言

在开始之前,我们需要保证系统中已经安装了Docker、JDK、Maven。


二、Docker 拉取镜像

我这里使用的是 2.344 版本的 Jenkins,拉取命令如下:

docker pull jenkins/jenkins:2.344

需要稍微等一会,等待拉取完成。
镜像下载完成后,我们可以通过如下命令查看我们 docker 中的所有镜像。

docker images

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins


这里可以看到我们刚才拉取的 2.344版本的 Jenkins 镜像。


三、运行容器

下载镜像成功后,我们需要用此镜像运行一个容器,命令如下:

docker run \
-d \
--name jenkins \
-u 0 \
-p 9999:8080 \
-p 8888:8888 \
-p 50000:50000 \
-v /usr/local/java/jdk-11.0.18:/usr/local/java/jdk-11.0.18 \
-v /usr/local/maven/apache-maven-3.6.1:/usr/local/maven/apache-maven-3.6.1 \
-v /home/jenkins_home:/home/jenkins_home \
jenkins/jenkins:2.344

命令解释:

  • -d:在后台运行
  • --name:为我们当前运行的容器取一个名称
  • -u:以某个用户的身份启动(此处的 0 代表是 root 用户,而如果不加该命令,jenkins 启动会默认以 1000 的用户 jenkins 启动,这样会导致某些文件夹的读写权限不足问题,因此建议加上 -u 0 命令启动容器)
  • p:指定映射的IP和端口,前者为本地系统的端口号,后者为容器内部的端口号。以 -p 9999:8888 举例,8888为容器内的端口号,而9999为容器内端口号映射到本地系统(容器外部)的端口,即我们访问本地系统的9999端口,实际会映射到容器内部的8888端口上。此处开放8888端口是因为后面构建项目时,项目的端口也为8888,避免重新给容器开放端口映射。
  • -v:绑定数据卷,拿 -v /usr/local/java/jdk-11.0.18:/usr/local/java/jdk-11.0.18 举例:表示将本地系统的 /usr/local/java/jdk-11.0.18 映射到 容器内部的 /usr/local/java/jdk-11.0.18

最后的 jenkins/jenkins:2.344 表示当前启动的容器是基于哪个镜像的,语法 Repository:Tag,如果当前的镜像是唯一的,也可以不用加Tag。

此处我将本地系统的 jdk11 和 maven 都映射到了 当前启动的容器中,而路径我为了便于统一(容器内的路径可以随便自定义),容器内的路径设置为和容器外一样的路径。

/usr/local/java/jdk-11.0.18 路径为本地系统JAVA_HOME 配置的路径,如果忘记了配置的路径,可以通过如下命令查看:

which java

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_maven_02


我们复制路径到bin目录的上一级即可,如此处为:/usr/local/java/jdk-11.0.18

/usr/local/maven/apache-maven-3.6.1 路径为本地系统JAVA_HOME 配置的路径,如果忘记了配置的路径,可以通过如下命令查看:

which mvn

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_03


同理,复制到 bin 目录的上一层即可,此处为:/usr/local/maven/apache-maven-3.6.1

四、访问Jenkins

当我们输入上述的 docker run 命令后,会生成一个容器,我们可以通过命令查看当前启动的容器:

docker ps

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_docker_04


如果某些同学输入命令后,没有看到该信息,那说明我们的容器运行失败了,可以通过如下命令查看所有容器的状态:

docker ps -a

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_05


这里的 STATUS 大概率会显示 Exit… 表明你的容器启动失败。我们可以查看具体原因。

解锁Jenkins

如果我们的容器启动成功,那么我们直接访问 本地的ip:9999 即可查看到当前页面。

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_06


此时我们如果直接在本地输入命令 cat /var/jenkins_home/secrets/initialAdminPassword 是查看不到的,因为该路径是容器内部的路径,我们需要先进入容器内部,再输入该命令,才能够成功看到密码。

进入容器命令:

docker exec -it 容器id/容器名称 bash

你可以输入的容器id或者容器名称,我一般习惯输入容器名称,如果你的 docker run 命令和我一样,那么可以直接复制如下命令进入容器内部:

docker exec -it jenkins bash

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_07

成功进入容器后,我们在输入如下命令查看初始密码:

cat /var/jenkins_home/secrets/initialAdminPassword

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_08

我们复制打印出来的密码,粘贴到网页,点击“继续”,进行下一步操作。

自定义Jenkins

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_maven_09


此处我建议点击“安装推荐的插件”的选项。然后耐心等待,有可能部分插件会安装失败,因为此处的下载源在国外。部分插件安装失败,我们可以点击重试,如果多次重试仍然失败(就是我本人),我们直接点击下一步。

创建第一个管理员用户

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_10

这里可以输入你想创建的账号,输入完毕后,点击保存并完成。

配置实例

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_11

这里默认即可,点击保存并完成。

Jenkins 已就绪

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_docker_12


点击 “开始使用Jenkins”,就可以进入到 Jenkins 的页面了。


五、Jenkins 配置

安装Maven插件

Maven插件默认是不会给我们安装的,因此我们需要自己安装。

首先点击左侧 “Manage Jenkins”,然后找到 “Manage Plugins”并点击,

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_13

然后点击“可选插件”并输入 maven,找到如下插件 Maven Integration plugin,点击下面的 Install without restart。

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_14

全局配置

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_15

首先点击左侧 “Manage Jenkins”,然后找到 “Global Tool Configuration”并点击,

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_jenkins_16


在这里我们需要配置JDK、Git、Maven。

JDK

点击 “JDK安装”

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_jenkins_17

输入别名及JAVA_HOME,这里的JAVA_HOME对应的是我们docker容器内部的JAVA_HOME,而我们在第三步将运行容器,将 java 映射的地址为 /usr/local/java/jdk-11.0.18(根据你 docker run 时的配置填写),因此这里直接上即可,如图:

/usr/local/java/jdk-11.0.18

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_18

GIT

Git会在我们自定义Jenkins时安装插件的时候,自动帮我们安装,此处我们无需填写,默认即可。

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_19

Maven

同理,此处需要填写maven的别名和MAVEN_HOME.

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_jenkins_20


MAVEN_HOME在我们运行容器映射的地址为:

/usr/local/maven/apache-maven-3.6.1

我们填上即可。

最后我们点击应用,然后点击保存即可。


六、部署Maven项目

首先,回到Jenkins首页,点击“+新建任务”,如图:

新建Maven项目

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_docker_21

输入我们项目的名称,点击构建一个Maven项目,然后点击确定,如图:

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_22

配置Git仓库

首先配置我们的Git仓库地址,此处我用的是自己开源的项目,所以无需填写凭证,如果大家的项目需要凭证,可以自行添加:

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_23


添加凭证非常简单,我相信都会,填好需要的账号密码点击保存即可。

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_jenkins_24


当我们添加完后,URL下方没有出现红色的错误提示表示能够正常连接到该仓库了,可以继续配置仓库分支,这里我选用的是一个 helloworld 的分支,大家根据实际情况自行填写:

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_java_25

配置Maven构建参数

接下来就是配置Maven,对项目进行打包,Root POM 不用修改,就用 pom.xml,而 Goals and options 我们填写:

clean install -Dmaven.test.skip=true

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_jenkins_26


这时候Maven的最基本配置就完成了。大家可以点击应用,并保存,开始构建项目,看看能不能打包成功。

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_maven_27

查看控制台输出:

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_28

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_maven_29

启动项目

这样就代表成功了,接下来就开始启动项目了,点击项目,打开左侧的配置,依次选择 Post Steps -> Add post build steps -> 执行shell

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_jenkins_30


填上我们的启动脚本,这里只是最简单的脚本,大家可以根据实际情况填写:

cd /var/jenkins_home/workspace/flowable_study/target
nohup java -jar flowable_study-1.0-SNAPSHOT.jar >flowable_study.log &2>1 &

注意:我这里是在docker容器内部运行的java项目,大部分实际情况是需要通过jenkins连接到其他服务器去部署项目。大致的流程为:

  • 将容器内的jar包拷贝到目标服务器
  • 切换目录,杀掉当前正在运行的项目
  • 启动项目

我这里只做最基本的部署演示,因此就不弄那么麻烦。同时我这里项目的端口号为8888,我在创建容器,使用 docker run 时,已经将容器内的8888端口映射到宿主机的8888端口了。

写好之后直接应用、保存。然后重新构建项目,这里就能够直接访问8888端口了。

docker中安装jenkins成功后无法访问 docker中jenkins配置maven不生效_Jenkins_31


由此,整个Maven项目构建完成。