使用Docker安装Jenkins

参考:
https://www.cnblogs.com/yy-cola/p/10457484.html
https://hub.docker.com/_/jenkins/

一、安装Jenkins

下面记录我的安装过程:

刚开始按照别的博客花里胡哨的直接docker pull jenkins,安装的是2.60.3版本的,在运行起来之后,安装插件时提示版本过低,一个插件都没有安装成功,由于用的docker部署的,所以没法直接更新,所以只好重新安装新版本了。

直接在Docker仓库https://hub.docker.com/search?type=image里面搜jenkins

在这里插入图片描述
点进去第一个可以看到,版本是2.60.3
在这里插入图片描述
第二个里面有两种,weekly是每周更新的版本,另一个lts是最新的版本。
在这里插入图片描述
之前安装的时候选择的是:docker pull jenkins/jenkins,下载的是英文版的,后面还要再安装中文插件,这次直接选择中文版的,我们可以在docker仓库里面看到,英文版的和中国定制版的。
在这里插入图片描述
可以看到k8s的还是很强的,下载量快是中国定制版的两倍了,这里我下载的是中国定制版。

使用命令:docker pull jenkinszh/jenkins-zh
在这里插入图片描述

下面的jenkins是之前用docker search jenkins拉取的,可以看到有很多层结构,版本是2.60.3显示Jenkins包大小是619M,拉取速度就看网速怎么样了。
在这里插入图片描述
然后使用docker inspect IMAGE ID查看版本信息:
在这里插入图片描述

在这里插入图片描述
这里在usr下面创建了两个文件夹用来存放Jenkins的数据:/usr/soft/jenkins_home用来映射Jenkins的地址,然后修改了权限为777
在这里插入图片描述
可以看到文件夹的权限为公共读写了,这样在Jenkins启动之后,就可以看到该文件夹下面会产生一些运行的文件,文件夹权限没有放开的换,该目录下是不会产生文件的,并且每次重启Jenkins后,都需要输入密码。

  1. 运行Jenkins镜像:
docker run -itd --name jenkins -p 8888:8080 -p 50000:50000 --restart always -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai -v /usr/soft/jenkins_home:/var/jenkins_home	 -v  /usr/local/maven/apache-maven-3.6.3:/usr/local/maven -v /etc/localtime:/etc/localtime jenkinszh/jenkins-zh

旧版本使用的命令,未挂载maven目录和时区,第一次部署后,只把localtime目录挂进去了,但是jenkins的时间还是跟系统时间错了8小时,查了之后发现还需要设置一个参数:-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai,不过我懒得重新部署了,就直接使用了另一种方式,在现在运行的jenkins里面手动执行脚本修改时区:

  • 1.进入URL:Jenkins访问地址/script
  • 2.执行:System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')
    在这里插入图片描述
    下面这个是原来启动的命令:
 docker run -itd --name jenkins -p 8888:8080 -p 50000:50000 --restart always -v /usr/soft/jenkins_home:/var/jenkins_home jenkins

-p:此处我将本机的8888端口映射到容器的8080端口上(jenkins默认端口8080)

-v:将容器内的文件夹映射到主机上,前面是主机目录,后面是容器目录

这里将Jenkins的8080端口映射到宿主机的8888端口,50000端口对应映射到50000端口了。此时还没有指定maven目录和jdk目录。

由于第一次我没有指定50000端口的映射,然后关闭Jenkins容器后再次运行上面的命令时报错了,提示jenkins 名称已被占用,需重命名之后再次运行。
报错信息如下:

docker: Error response from daemon: Conflict. The container name “/jenkins” is already in use by container “9b6e345479d50133c6a0733593935eae8a28fd1697dcf78b736e67455bbf568e”. You have to remove (or rename) that container to be able to reuse that name.
See ‘docker run --help’.

这时需要先删除原来的启动痕迹:

查询docker运行过的容器痕迹:docker ps -a
删除原Jenkins痕迹:docker rm ID

在这里插入图片描述
再次运行即可。(不知道为什么--rm指令不好使。看help里面提示:在运行Jenkins的命令里面加上--rm,意思是先检测是否存在该容器,如果存在,则删除已存在的容器,然后运行。)

这时我们的Jenkins就已经启动了,可以查看下Jenkins的日志:

docker logs -f jenkins

2.60.3版本的可以看到会将Jenkins的密码打印出来:

在这里插入图片描述
2.225版本的日志是这样:
在这里插入图片描述
由于之前运行的时候没有指定jdk的目录,下面我们来看下当前Jenkins版本(2.225版本)中默认使用的jdk版本:

首先进入jenkins容器内部:docker exec -it 容器ID /bin/bash,退出容器:exit
在这里插入图片描述


-----------------------------------------2021-03-08-分割线---------------------------------------
这次安装完中文版的jenkins,启动后查看日志,发现出现了各异常:
在这里插入图片描述
异常貌似是查询jenkins版本信息的。但是最后,显示正在运行了。。。。。。

版本是2.222.4
在这里插入图片描述

接着试下登录,复制上面的密码,登录成功后,提示安装插件,这里选择安装社区推荐插件,直接报错了:
在这里插入图片描述
点击重试,依然错误,然后换成第二项,选择合适的插件。
在这里插入图片描述
结果还是失败,直接全部取消勾选,等后面用到了再安装插件好了。 点击安装进入配置用户界面。


1.1登录Jenkins

我们直接在浏览器里面访问IP+端口即可,我这里是:192.168.3.3:8888

在这里插入图片描述
然后我们直接复制上面日志中的密码,或者进入Jenkins内部: docker exec -it jenkins bash 之后使用cat /var/jenkins_home/secrets/initialAdminPassword也可看到密码,将密码输入上面的输入框里面,稍等片刻就可以看到Jenkins服务起来了,如果半天没响应可以重启Jenkins镜像:docker restart {CONTAINER ID}
在这里插入图片描述

服务起来之后会自动进入插件安装指引页面,这里我们选择第一个社区推荐的插件:
在这里插入图片描述
或者直接右上角的关闭按钮,后续自己选择插件的安装。

我试了下安装社区推荐的插件,但是特别慢,一直显示下面的页面,好半天了进度条才走一点点,还有两个失败的:
在这里插入图片描述
如果下载的是2.60.3版本的,由于版本太低,上面的插件会全部失败,这时可以重启Jenkins容器,然后直接关闭上面的插件指引页面。

这次使用中文版的,下载插件就很顺利,然后设置第一个管理员后进入配置Jenkins URL页面:
在这里插入图片描述
这里直接跳过了,点击下面的:现在不要
在这里插入图片描述

由于容器运行日志文件什么的,挂载到了宿主机的新目录里了,所以在我换了新版本之后,设置的密码仍然有效。

在这里插入图片描述
启动之后仍然是需要输入密码:查看密码步骤同上,输入密码之后,会弹出插件安装失败的页面,这时,直接back,然后右上角关闭插件安装指引页面,先进入Jenkins再说。
在这里插入图片描述
然后这里可以修改密码了,试下自定义密码:
点击右上角的admin进入再设置页面:
在这里插入图片描述
修改账号名称和密码:
在这里插入图片描述
保存之后,注销,然后测试新密码是否生效,其中用户名需要输入admin,登录之后才会显示刚才自定义的用户名:
在这里插入图片描述
登录之后进入系统设置,这时可以看到安装插件失败是因为Jenkins的版本过低:
在这里插入图片描述

1.2 安装中文插件

新版本是英文版的,这里安装中文插件,下载的中文版就可以跳过了:
在这里插入图片描述
在这里可以看到插件插件列表
在这里插入图片描述
翻到Local开头的,可以看到LocalLocalization: Chinese (Simplified) 勾选之后,直接安装
在这里插入图片描述
在这里插入图片描述
等待安装进度条走完,然后直接点击Go back使其生效。

刷新之后发现,插件对新版Jenkins支持效果并不是很理想,如果觉得不习惯可以在已安装插件里面卸载中文插件
在这里插入图片描述
在这里插入图片描述

下面安装其他插件:
插件安装参考:https://www.cnblogs.com/sxdcgaq8080/p/10489369.html

1.3 配置自动部署所需插件

如果想实现Jenkins打包之后直接部署,则需要下载SSH插件,然后在打包后使用脚本文件运行项目即可。

我这里先安装了:

  • Maven Integration
  • GitLab和GitLab Hook
    在这里插入图片描述
    这里尽量选择先下载,然后手动重启,因为之前遇到过直接安装的时候,会一直卡在下载那里,而先下载重启后安装,则正常,不知道是网络问题还是什么情况。

手动重启,直接使用URL重启即可:http://192.168.124.51:9999/restart,点击是,进行重启
在这里插入图片描述
接着安装GitLabGitLab Hook
在这里插入图片描述
在这里插入图片描述
然后重启Jenkins。


---------------------------------------------下面是原来直接安装时遇到的错误信息。-----------------------------

安装GitLab和GitLab Hook时提示jdk已安装,需要重启Jenkins,并且还有一个VMI** 提示安装失败,然后我重启了Jenkins容器之后,失败的提醒没有了。
在这里插入图片描述
选择下载下次重启后安装。
在这里插入图片描述

这里只是安装了maven插件,后面打包maven项目时,还需要安装maven,然后配置maven仓库。
在这里插入图片描述
在这里插入图片描述

1.4 安装SSh插件

在这里插入图片描述

1.5 插件管理异常

今天打开Jenkins 准备安装个新的插件,结果发现提示了一行信息: There were errors checking the update sites: SocketTimeoutException: connect timed out
在这里插入图片描述
强迫症有点不能忍,担心后面别安装插件失败了,想着先安装试下,选择直接安装后,果然提示超时异常了。

Checking internet connectivity
Checking update center connectivity
java.net.SocketTimeoutException: connect timed out
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
	at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
	at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:352)
	at hudson.model.UpdateCenter$UpdateCenterConfiguration.testConnection(UpdateCenter.java:1368)
	at hudson.model.UpdateCenter$UpdateCenterConfiguration.checkUpdateCenter(UpdateCenter.java:1151)
	at hudson.model.UpdateCenter$ConnectionCheckJob.run(UpdateCenter.java:1600)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:111)
	at java.lang.Thread.run(Thread.java:748)

解决办法:修改插件管理中心位置。
在这里插入图片描述
这里之前是:https://updates.jenkins-zh.cn/update-center.json
在这里插入图片描述
现在改成:http://updates.jenkins.io/update-center.json,然后点击提交,立即获取。这个JSON文件的内容有点大,让它反应一会。然后重新操作之前的安装插件就可以了。
在这里插入图片描述

二、Centos7安装Maven

查看maven最新版本:https://maven.apache.org/download.cgi

在这里插入图片描述
当前最新版为3.6.3,可以直接下载下面的tar.gz文件,然后使用ssh上传到linux下。
或者使用命令:

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-
maven-3.6.3-bin.tar.gz

可以直接下载到当前目录:
在这里插入图片描述
如果提示没有wget命令,则安装:yum install -y wget

解压到当前文件夹:tar zxvf apache-maven-3.6.3-bin.tar.gz

配置环境变量:vim /etc/profile,将下面两行加入环境变量最后

export MAVEN_HOME=/usr/soft/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

重新加载配置文件:source /etc/profile

查看maven版本:mvn -version
在这里插入图片描述
如果提示mvn 未找到命令,则先检查下java环境是否安装了。如果java环境正常,则检查环境变量里面的maven路径是否正确。

新建本地maven仓库:
首先进入apache-maven-3.6.3文件夹,然后创建文件夹: mkdir LocalRepository,修改文件夹权限为公共读写chmod 777 LocalRepository/
在这里插入图片描述
修改settings.xml文件,设置自定义仓库地址。
进入maven安装文件夹下的conf文件夹下,修改settings.xml文件:
在这里插入图片描述
可以看到,这里默认文件夹为Default: ${user.home}/.m2/repository,并且是注释的内容。这里我们自定义改为
在这里插入图片描述

之前是使用的:/usr/soft/apache-maven-3.6.3/LocalRepository,按正常来说确实应该这样设置,但是,这里是为了在jenkins里面使用maven构建,所以这个路径应该是上面挂载的maven里面的路径,所以应该用:/usr/local/maven/LocalRepository。这里只是指定了本地仓库的路径,这个路径对于宿主机来说也是存在的。

然后配置maven使用阿里云远程仓库下载jar

	<mirror>
     <id>nexus</id>
     <mirrorOf>*</mirrorOf> 
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   </mirror> 

在这里插入图片描述

最后在Jenkins全局配置里面设置自定义的maven路径:


--------------------------------------------------------- 分割线-2021-03-12 -------------------------------------------------------------------
这次安装的时候,修改了下面的默认settings配置
在这里插入图片描述
用了自定义的配置文件,按正常来说,既然maven里面已经指定了settings文件了,貌似就不用指定了,但是这里为了保险起见,还是手动制定下,避免不必要的问题。
在这里插入图片描述

下面的配置是原来装的,这里直接将启动Jenkins时,挂载的目录/usr/local/maven给配上:
在这里插入图片描述
这里不要勾选自动安装。保存即可。
在这里插入图片描述

下面是之前服务器配置的:
在这里插入图片描述
下面maven安装那里需要配置一下本机maven安装路径:/usr/soft/apache-maven-3.6.3。如果没有配置的话,在新建任务时,maven项目会提示:Jenkins needs to know where your Maven is installed. Please do so from the tool configuration.

在这里插入图片描述
注意不要勾选Install automatically,忽略黄色警告,直接保存即可。

三、新建项目任务:

创建一个maven项目,拉取svn上面的代码,然后使用Jenkins的自动打包上传功能。
在Jenkins首页,点击左侧菜单栏中的新建Item
在这里插入图片描述
发现这次安装的Jenkins版本里面没有新建maven项目的选项,然后试着安装maven插件:
在可选插件里面搜索maven,下载Maven Integration
在这里插入图片描述
然后重启Jenkins:在浏览器中访问:http://IP:端口/restart,然后点击“是”,即可重启Jenkins。然后可以看到下图中多了一个选择maven项目的选项。
在这里插入图片描述

设置任务名称,然后选择构建maven项目。如果已有存在的任务,可以直接在复制后面的输入框里面输入任务的名称,会自动匹配该任务,并且复制该任务的配置。
在这里插入图片描述
设置项目名之后,会进入下图页面:
在这里插入图片描述
无论代码在svn上还是gitlab上面,都是需要配置用户名和密码,然后才能有权限拉取代码的。

如果代码在gitlab上面,则这里需要注意一点,配置代码地址和分支后,构建时,指定pom文件时,注意pom文件的位置是否正确。

指定代码地址和分支:
在这里插入图片描述
指定pom文件:
在这里插入图片描述
构建的命令,这里我用了clean package -P dev,release,这个是项目pom里面配置的。如果自己的项目里面没有指定打包相关的配置,可以直接默认即可。默认Root POM是pom.xml ,Goals and options这里应该是空白。

走到这里可以先测试下maven打包是否正常,直接保存,然后回到工作台,构建刚才创建的任务。

点击立即构建,则可以在左边的任务列表里面看到控制台日志:拉取代码,下载maven依赖包。
在这里插入图片描述
在这里插入图片描述
可以看到构建成功了,然后构建后的文件目录为:/var/jenkins_home/workspace,但是这时要是去宿主机上找这个文件夹,是找不到的,因为这个路径是Jenkins容器里面的路径。Jenkins容器的所有操作都是在镜像内部操作的,但是我们在启动Jenkins的时候,将此目录给挂载出来了,-v /usr/soft/jenkins_home:/var/jenkins_home,所以,可以去宿主机的/usr/soft/jenkins_home下看到Jenkins打包的文件。在上面的路径下可以看到任务名对应的文件夹,该文件夹下面就是拉取的代码和构建的文件。
在这里插入图片描述
另外上图的maven仓库,也生效了,这里maven构建下载的依赖,也即是我们指定的文件夹了。

如果打包正常的话,再接着往下进行,配置上传打包文件,或者构建docker镜像。


---------------------------------------------------历史安装记录,配置svn---------------------------------------
由于公司代码在svn上面,这里源码管理里面没有svn,那么我们需要安装svn插件。

回到首页,进入设置:
在这里插入图片描述
然后选择插件管理:
在这里插入图片描述
在可选插件中,搜索Subversion
在这里插入图片描述
然后等待Jenkins自动下载安装即可,安装完成之后,可以直接返回首页。
在这里插入图片描述
这时在进入刚才新建的任务中,添加源码配置:
在这里插入图片描述
这里需要填入源码的路径,和SVN用户名称和密码。

点击添加,然后点击Jenkins的小房子图标,进入下图
在这里插入图片描述
上面的三项默认即可,输入用户名和密码、ID,其中ID和描述为非必填。

添加成功后没有任何提示,但是可以在配置页面的下拉框里面看到刚才新建的用户信息。
在这里插入图片描述
Pre Steps:可添加构建前的操作:
在这里插入图片描述

Build:默认即可。

Post Steps:构建之后的操作,这里可将构建的镜像上传到镜像仓库,可以看到构建步骤只有三项,没有docker,所以需要先安装docker插件。

系统管理-插件管理-可选插件-搜docker,选择插件后,可直接安装,如果失败了,可以尝试先下载待重启后安装。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
失败了,看下详细信息,发现是超时了,然后选择重启后安装。然后进度条它动了!!!
在这里插入图片描述
安装成功之后,重启Jenkins可以看到,构建步骤中有了Execute Docker command
在这里插入图片描述

然后选择仅构建成功之后再运行步骤(构建镜像,然后推送镜像到镜像仓库):
在这里插入图片描述
在这里插入图片描述
192.168.3.3:5000为镜像仓库地址,由于我这里没有设置验证,所以Registry credentials那里为空。

其中$BUILD_NUMBER为Jenkins自动帮我们维护的标号,每构建一次,number会自动+1.

这里保存后,需要配置docker.service ,否则会出现uri was not specified异常,跳过下面构建的步骤,去配置docker.service

然后直接保存,保存成功可以回到首页,任务列表中会出现新建的任务,选择立即构建,然后点击右边执行状态中的项目名,可以看到构建过程。
在这里插入图片描述

不出现意外的话,就会自动下载依赖包了,第一次构建会比较慢。
在这里插入图片描述

本地私有jar包,放到Jenkins的maven仓库中:

如果因为本地私有jar包构建失败的话,可以看下具体的错误信息,成功了可以直接跳过这部分:
在这里插入图片描述
在这里插入图片描述
由于这里引用了maven仓库中没有的依赖(本地打的依赖),可以尝试手动上传依赖到服务器的maven仓库。如果手动设置了maven仓库的地址,可以直接上传。我这里自定义了仓库地址为:/usr/soft/apache-maven-3.6.3/LocalRepository,如果找不到maven仓库地址的话,可以全局搜一下,find / -name ".m2" ,Jenkins默认的仓库地址为jenkins_home下的.m2文件夹
在这里插入图片描述
我这里直接上传zip压缩包到对应路径下,然后直接解压到当前路径下:
在这里插入图片描述
然后尝试再次构建。
在这里插入图片描述
果然没有这么顺利,又失败了,提示:/usr/soft/apache-maven-3.6.3/LocalRepository/com/alipay/sdk/alipay-trade-sdk/20161215/alipay-trade-sdk-20161215.pom.part.lock (Permission denied)
在这里插入图片描述
看下刚才解压的文件夹的属性,我解压的时候是root操作的,所以解压文件夹的所有者是root,而源文件夹(20161215_old)的所有者是linmengm...
在这里插入图片描述
那么我们来修改这个文件夹的所有者和所属用户组:
在这里插入图片描述
chown 是修改文件和目录的所有者和所属组的命令
-R: 递归设置权限,也就是给子目录中的所有文件设置权限
":“之前是文件的所有者,之后是所属组。这里的”:“也可以使用”."代替,如果只写一个,则代表只修改了文件的所有者。

再次构建,等待拉取依赖包,最后maven构建成功了,但是生成docker镜像却报错了。

构建成功后,制作docker镜像异常:uri was not specified

但是上传镜像到docker仓库中却报错了:uri was not specified

INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10:12 min
[INFO] Finished at: 2020-05-20T08:35:17Z
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/jenkins_home/workspace/certify_tool_test/pom.xml to certify_tool/certify_tool/1.0.0/certify_tool-1.0.0.pom
[JENKINS] Archiving /var/jenkins_home/workspace/certify_tool_test/target/certify_tool-1.0.0.jar to certify_tool/certify_tool/1.0.0/certify_tool-1.0.0.jar
channel stopped
ERROR: Build step failed with exception
java.lang.NullPointerException: uri was not specified
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204)
	at com.github.dockerjava.core.DefaultDockerClientConfig$Builder.withDockerHost(DefaultDockerClientConfig.java:368)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.createDockerClient(DockerBuilder.java:130)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:229)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:221)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:70)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.build(MavenModuleSetBuild.java:946)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:896)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1880)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:428)
Build step 'Execute Docker command' marked build as failure
Finished: FAILURE

这时需要修改docker.service文件中的ExecStart

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

至于docker.service的位置,我本机的位置在:/lib/systemd/system/docker.service,我看网上博客有说修改/etc/sysconfig/docker文件中的ExecStart,我看了一下,发现没有此文件,不知道是不是因为docker版本不一致的问题又或者是修改了docker的配置文件。

修改docker.service: vim /lib/systemd/system/docker.service

原来的docker.service 中这个参数的值为:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在这里插入图片描述
注释原来的,新增一行内容如下:
在这里插入图片描述

然后在jenkins管理界面中。系统管理-系统设置-Docker Builder 中,将Docker URL改成tcp://本机IP:2375 ,保存。
在这里插入图片描述

开始没在意默认的unix:///var/run/docker.sock命令中,包含了两个斜杠,var前面应该是有三个斜杠,这个如果不对的话,还是不能正常构建的。

保存后构建提示异常信息:

ERROR: Build step failed with exception
java.net.URISyntaxException: Illegal character in authority at index 6: tcp://192.168.3.3:2375 
	at java.net.URI$Parser.fail(URI.java:2848)
	at java.net.URI$Parser.parseAuthority(URI.java:3186)
	at java.net.URI$Parser.parseHierarchical(URI.java:3097)
	at java.net.URI$Parser.parse(URI.java:3053)
	at java.net.URI.<init>(URI.java:588)
	at java.net.URI.create(URI.java:850)
Caused: java.lang.IllegalArgumentException: Illegal character in authority at index 6: tcp://192.168.3.3:2375 
	at java.net.URI.create(URI.java:852)
	at com.github.dockerjava.core.DefaultDockerClientConfig$Builder.withDockerHost(DefaultDockerClientConfig.java:369)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.createDockerClient(DockerBuilder.java:130)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:229)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:221)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:70)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.build(MavenModuleSetBuild.java:946)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:896)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1880)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:428)
Build step 'Execute Docker command' marked build as failure
Finished: FAILURE

第一次修改成ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:4234 -H unix:///var/run/docker.sock
在这里插入图片描述
结果提示下面的失败信息:

[Docker] INFO: Pushing image 192.168.3.3:5000/lmm/certify_tool_test:1.0_8
[Docker] ERROR: Failed to exec start:Connect to 127.0.0.1:4243 [/127.0.0.1] failed: Connection refused (Connection refused)
[Docker] ERROR: failed to push image 192.168.3.3:5000/lmm/certify_tool_test:1.0_8
ERROR: Build step failed with exception
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
Caused: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:4243 [/127.0.0.1] failed: Connection refused (Connection refused)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
	at org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:435)
	at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)
	at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:701)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
	at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:697)
	at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:448)
	at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:349)
	at com.github.dockerjava.jaxrs.async.POSTCallbackNotifier.response(POSTCallbackNotifier.java:29)
	at com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier.call(AbstractCallbackNotifier.java:50)
	at com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier.call(AbstractCallbackNotifier.java:24)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused: java.lang.RuntimeException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at com.github.dockerjava.core.async.ResultCallbackTemplate.getFirstError(ResultCallbackTemplate.java:133)
	at com.github.dockerjava.core.async.ResultCallbackTemplate.awaitCompletion(ResultCallbackTemplate.java:94)
	at com.github.dockerjava.core.command.PushImageResultCallback.awaitSuccess(PushImageResultCallback.java:41)
	at org.jenkinsci.plugins.dockerbuildstep.cmd.remote.PushImageRemoteCallable.call(PushImageRemoteCallable.java:69)
	at org.jenkinsci.plugins.dockerbuildstep.cmd.remote.PushImageRemoteCallable.call(PushImageRemoteCallable.java:26)
	at hudson.remoting.LocalChannel.call(LocalChannel.java:45)
	at org.jenkinsci.plugins.dockerbuildstep.cmd.PushImageCommand.execute(PushImageCommand.java:76)
Caused: java.lang.IllegalArgumentException
	at org.jenkinsci.plugins.dockerbuildstep.cmd.PushImageCommand.execute(PushImageCommand.java:81)
	at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:77)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.build(MavenModuleSetBuild.java:946)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:896)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1880)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:428)
Build step 'Execute Docker command' marked build as failure
Finished: FAILURE

上面项目是使用的公司的小项目,随意修改不太合适,我这里搭建了一个简单的SpringBoot项目,然后新建了一个job,copy的certify_tool_test的配置:
在这里插入图片描述
也就是说,在配置成功一个项目,后面新项目都可以直接复制原来的配置,修改代码路径和镜像名称即可。

至此,如果能打包成功,那么便是完成了第一步:
在这里插入图片描述
下面就是打包成镜像了。

在项目的根目录下创建一个Dockerfile(跟pom文件在同一路径)
在这里插入图片描述
里面就是项目的各种配置:

FROM 192.168.3.3:5000/jdk8:latest
RUN yum install net-tools.x86_64 -y
ADD target/jenkins_demo-1.0.0.jar  /workspace/jenkins_demo-1.0.0.jar
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  && echo 'Asia/Shanghai' >/etc/timezone 
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENTRYPOINT [ "sh", "-c", "java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Dlog.path.prefix=/logs/${log_path}/$(date '+%Y-%m-%d_%H:%M:%S')_$(ifconfig eth0 | grep 'inet '  | awk '{ print $2}') -jar /workspace/jenkins_demo-1.0.0.jar"]

简单了解一下Dockerfile中的内容:

项目的运行环境是很重要的,首先是从镜像仓库拉取jdk版本。前提是你的镜像仓库中要有jdk镜像。记得当时构建jdk镜像是参考:使用Docker构建jdk1.8镜像
构建成功后,可以查看镜像仓库中的镜像浏览器访问http://IP:镜像仓库的端口/v2/_catalog
我这里是:http://192.168.3.3:5000/v2/_catalog
在这里插入图片描述
这里的jdk8,就是我们需要拉取的jdk镜像,也就是Dockerfile的第一句。

然后安装net-tools工具。

第三步:将上面打的jenkins_demo-1.0.0.jar包copy到workspace下。

第四步:指定时区。

五六步:设置运行环境为UTF-8,避免日志乱码等问题。

最后定义当前jar包运行的各种参数。

maven打包正常之后,就会开始执行Dockerfile的内容了,下图的蓝色日志信息:
在这里插入图片描述在这里插入图片描述
成功之后,再次查看镜像仓库的镜像:
在这里插入图片描述

在系统全局设置里面,配置镜像仓库的地址:
在这里插入图片描述
在这里插入图片描述
保存之后,可以看到立即构建:
在这里插入图片描述

【Devops】【docker】【CI/CD】1.docker搭建Gitlab环境
【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署

您好!要在CentOS 7上使用Docker安装Jenkins,您可以按照以下步骤操作: 1. 首先,确保您的CentOS 7系统已安装Docker。如果没有安装,请按照以下步骤安装Docker: ``` sudo yum update -y sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker ``` 2. 确保Docker已正确启动后,可以使用以下命令检查其状态: ``` sudo systemctl status docker ``` 3. 创建一个Docker容器来运行Jenkins。您可以使用以下命令创建并运行一个名为"my-jenkins"的容器: ``` sudo docker run -d -p 8080:8080 -p 50000:50000 --name my-jenkins jenkins/jenkins:lts ``` 这将从Docker Hub上的Jenkins镜像创建一个新容器,并将容器的8080端口映射到主机的8080端口,以及50000端口用于Jenkins代理。 4. 容器启动后,可以使用以下命令查看容器日志并获取初始管理员密码: ``` sudo docker logs my-jenkins ``` 在日志中,搜索类似于"Please use the following password to proceed to installation"的行,后面会跟着一个密码。复制该密码。 5. 使用浏览器访问`http://your_server_ip:8080`,将"your_server_ip"替换为您的服务器的实际IP地址。 6. 在Jenkins界面中,粘贴刚刚复制的密码,并继续安装过程。 7. 安装完成后,您可以设置Jenkins的管理员账号和密码,并根据需要进行其他配置。 这样,您就成功在CentOS 7上使用Docker安装Jenkins。希望对您有所帮助!如有其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值