一、前言
在开始之前,我们需要保证系统中已经安装了Docker、JDK、Maven。
二、Docker 拉取镜像
我这里使用的是 2.344 版本的 Jenkins,拉取命令如下:
docker pull jenkins/jenkins:2.344
需要稍微等一会,等待拉取完成。
镜像下载完成后,我们可以通过如下命令查看我们 docker 中的所有镜像。
docker images
这里可以看到我们刚才拉取的 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
我们复制路径到bin目录的上一级即可,如此处为:/usr/local/java/jdk-11.0.18
/usr/local/maven/apache-maven-3.6.1 路径为本地系统JAVA_HOME 配置的路径,如果忘记了配置的路径,可以通过如下命令查看:
which mvn
同理,复制到 bin 目录的上一层即可,此处为:/usr/local/maven/apache-maven-3.6.1
四、访问Jenkins
当我们输入上述的 docker run 命令后,会生成一个容器,我们可以通过命令查看当前启动的容器:
docker ps
如果某些同学输入命令后,没有看到该信息,那说明我们的容器运行失败了,可以通过如下命令查看所有容器的状态:
docker ps -a
这里的 STATUS 大概率会显示 Exit… 表明你的容器启动失败。我们可以查看具体原因。
解锁Jenkins
如果我们的容器启动成功,那么我们直接访问 本地的ip:9999 即可查看到当前页面。
此时我们如果直接在本地输入命令 cat /var/jenkins_home/secrets/initialAdminPassword 是查看不到的,因为该路径是容器内部的路径,我们需要先进入容器内部,再输入该命令,才能够成功看到密码。
进入容器命令:
docker exec -it 容器id/容器名称 bash
你可以输入的容器id或者容器名称,我一般习惯输入容器名称,如果你的 docker run 命令和我一样,那么可以直接复制如下命令进入容器内部:
docker exec -it jenkins bash
成功进入容器后,我们在输入如下命令查看初始密码:
cat /var/jenkins_home/secrets/initialAdminPassword
我们复制打印出来的密码,粘贴到网页,点击“继续”,进行下一步操作。
自定义Jenkins
此处我建议点击“安装推荐的插件”的选项。然后耐心等待,有可能部分插件会安装失败,因为此处的下载源在国外。部分插件安装失败,我们可以点击重试,如果多次重试仍然失败(就是我本人),我们直接点击下一步。
创建第一个管理员用户
这里可以输入你想创建的账号,输入完毕后,点击保存并完成。
配置实例
这里默认即可,点击保存并完成。
Jenkins 已就绪
点击 “开始使用Jenkins”,就可以进入到 Jenkins 的页面了。
五、Jenkins 配置
安装Maven插件
Maven插件默认是不会给我们安装的,因此我们需要自己安装。
首先点击左侧 “Manage Jenkins”,然后找到 “Manage Plugins”并点击,
然后点击“可选插件”并输入 maven,找到如下插件 Maven Integration plugin,点击下面的 Install without restart。
全局配置
首先点击左侧 “Manage Jenkins”,然后找到 “Global Tool Configuration”并点击,
在这里我们需要配置JDK、Git、Maven。
JDK
点击 “JDK安装”
输入别名及JAVA_HOME,这里的JAVA_HOME对应的是我们docker容器内部的JAVA_HOME,而我们在第三步将运行容器,将 java 映射的地址为 /usr/local/java/jdk-11.0.18(根据你 docker run 时的配置填写),因此这里直接上即可,如图:
/usr/local/java/jdk-11.0.18
GIT
Git会在我们自定义Jenkins时安装插件的时候,自动帮我们安装,此处我们无需填写,默认即可。
Maven
同理,此处需要填写maven的别名和MAVEN_HOME.
MAVEN_HOME在我们运行容器映射的地址为:
/usr/local/maven/apache-maven-3.6.1
我们填上即可。
最后我们点击应用,然后点击保存即可。
六、部署Maven项目
首先,回到Jenkins首页,点击“+新建任务”,如图:
新建Maven项目
输入我们项目的名称,点击构建一个Maven项目,然后点击确定,如图:
配置Git仓库
首先配置我们的Git仓库地址,此处我用的是自己开源的项目,所以无需填写凭证,如果大家的项目需要凭证,可以自行添加:
添加凭证非常简单,我相信都会,填好需要的账号密码点击保存即可。
当我们添加完后,URL下方没有出现红色的错误提示表示能够正常连接到该仓库了,可以继续配置仓库分支,这里我选用的是一个 helloworld 的分支,大家根据实际情况自行填写:
配置Maven构建参数
接下来就是配置Maven,对项目进行打包,Root POM 不用修改,就用 pom.xml,而 Goals and options 我们填写:
clean install -Dmaven.test.skip=true
这时候Maven的最基本配置就完成了。大家可以点击应用,并保存,开始构建项目,看看能不能打包成功。
查看控制台输出:
启动项目
这样就代表成功了,接下来就开始启动项目了,点击项目,打开左侧的配置,依次选择 Post Steps -> Add post build steps -> 执行shell
填上我们的启动脚本,这里只是最简单的脚本,大家可以根据实际情况填写:
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端口了。
由此,整个Maven项目构建完成。