[参考] https://www.jenkins.io/zh/doc/book/installing/
镜像版本的选择jenkinsci/blueocean
或者jenkins/jenkins:<版本号>
这两个版本有啥区别呢,第一版本内置blueocean
的,后者是不带的
建议使用的Docker映像是jenkinsci/blueocean image(来自 the Docker Hub repository)。 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。
jenkinsci/blueocean每次发布Blue Ocean新版本时,都会发布新镜像。您可以在标签 page页上看到以前发布的镜像版本列表 。
您还可以使用其他Jenkins Docker镜像(在Docker Hub上可通过jenkins/jenkins获取)。 但是,这些不会随Blue Ocean的发布而提供,需要通过 Jenkins中的Manage Jenkins > Manage Plugins页面进行安装。 在Blue Ocean入门中了解更多信息。
开始安装
docker run \
-u root \
--rm
-d \
-p 14848:8080 \
-p 50000:50000 \
-v /docker/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins jenkinsci/blueocean
解锁jenkins,需要进入下方目录,注意是容器内部的目录地址。前面我们启动时做了地址映射,可以直接在主机下的/docker/jenkins
找到/secrets/initalAdminPassword
cat /docker/jenkins/secrets/initialAdminPassword
稍等几分钟
点击Manage Jenkins
>Manage Plugins
进入Manage Plugins
>可使用插件>查找Mavan Integration
及Pipeline Maven Configuration
勾选安装完后,需要重启,再次登录
Mavan Integration
成功安装后,进入Jenkins界面后,点击新建任务,可以看到多了一个maven项目
Pipeline Maven Configuration
成功安装后,进入Jenkins界面后,系统设置>全局工具配置,可以看到多了一个Pipeline Maven Configuration
开放环境的一致性很重要,jenkins的编译环境需要与开发环境保持一致,放可确保编译不出错
首先看看自己的java开发环境的jdk
与maven
的版本,下载相应的安装包到/docker/jenkins
该目录对应容器的/var/jenkins_home
如下图,直接解压即可,甚至,直接从原来的环境copy到这里都可以,只要确保是你需要的版本即可
下一步是配置的关键,系统设置>全局工具配置,配置JDK、Maven
jdk的新增加
Maven的新增加
注意上面的地址是容器内的地址
,Name可以随便取一个相关的名
新建任务,选择构建一个Maven项目
下午 输入代码库及登录账号密码
构建触发器中,取消第一选项Build whenever a SNAPSHOT dependency is built
,如果需要创建其他触发器,需要安装相应的插件
设置构建选项
Root POM选择根pom.xml
,如果需要构建项目下的某个子项目责修改为相应的子目录下的pom.xml文件即可
Goals and options 可以添加构建选项,比如选择构建开发环境、测试环境、生成环境的配置,在pom.xml
中 做了声明
如下所示
clean install -P <env_name1> -D activeByDefault=true -D image.version=<version>
当然,可以正常构建的前提是,你的项目
pom.xml
必须声明如何构建成jar包,并且生成的jar后,如何打包成docker镜像。同时需要定义一个dockerfile
,声明docker镜像的内容。
1、构建过程中,提示jdk或maven报错,多半是因为jdk或maven没配置正常的版本
2、构建过程中,发现等待连接docker主机,则可能是因为,docker镜像打包的服务未开通docker远程管理
jenkins在构建docker过程中,会将上一步生成的jar及dockerfile等内容,发送到远程docker主机中,由远程docker主机进行生成docker镜像的。知道这个基本原理后,后面的问题都有方向排除了。
打开pom.xml
,找到指定的dockerHost
主机,进入该主机,设置docker远程允许
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
#重新加载配置文件
systemctl daemon-reload
#重启服务
systemctl restart docker.service
#查看端口是否开启
netstat -nptl | grep 2375
3、dockerfile构建失败
第一个基础镜像无法拉取?一般在做CI/CD时,都是使用私有仓库,这时会导致在dockerfile的第一个基础镜像pull不到。
解决办法就是,自己先拉取一个镜像库到docker主机下,即可。
4、docker构建成功,但是一直无法push到私有镜像仓库
[WARNING] Failed to push .......
分析,首先进入docker主机,测试一下能否成功执行docker push
发布镜像到目标仓库。如果正常,多半是因为jenkins构建过程中maven的权限问题。
找到代码中的pom.xml
文件,查看一下
<plugin>
<groupId>com.spotifygroupId>
<artifactId>dockerfile-maven-pluginartifactId>
<version>${docker.plugin.version}version>
<executions>
<execution>
<id>tag-latestid>
<phase>deployphase>
<goals>
<goal>buildgoal>
<goal>taggoal>
<goal>pushgoal>
goals>
<configuration>
<tag>latesttag>
configuration>
execution>
<execution>
<id>tag-versionid>
<phase>deployphase>
<goals>
<goal>buildgoal>
<goal>taggoal>
<goal>pushgoal>
goals>
<configuration>
<tag>${project.version}tag>
configuration>
execution>
executions>
<configuration>
<contextDirectory>${project.basedir}contextDirectory>
<useMavenSettingsForAuth>trueuseMavenSettingsForAuth>
<repository>${docker.registry.url}/blade/${project.artifactId}repository>
<tag>${project.version}tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jarJAR_FILE>
buildArgs>
configuration>
plugin>
这里说明使用的是maven的配置权限
解决办法
找到在maven的setting.xml文件中增加私服镜像发布账号信息(如果私服不允许匿名发布的话)
在 标签servers下增加:
<servers>
<server>
<id>register.docker.beree.netid>
<username>账户名username>
<password>密码password>
<configuration>
<email>邮箱email>
configuration>
server>
servers>
注意该maven是jenkins容器内部的maven地址