手把手教你docker+jenkins+git+maven+harbor自动化构建

[参考] https://www.jenkins.io/zh/doc/book/installing/

先上一张jenkins的发布流程图

手把手教你docker+jenkins+git+maven+harbor自动化构建_第1张图片

一、docker 安装jenkins

镜像版本的选择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

浏览器输入地址,显示如下界面
手把手教你docker+jenkins+git+maven+harbor自动化构建_第2张图片
首次登陆需要花几分钟

解锁jenkins,需要进入下方目录,注意是容器内部的目录地址。前面我们启动时做了地址映射,可以直接在主机下的/docker/jenkins找到/secrets/initalAdminPassword

cat /docker/jenkins/secrets/initialAdminPassword

手把手教你docker+jenkins+git+maven+harbor自动化构建_第3张图片
选择推荐安装
手把手教你docker+jenkins+git+maven+harbor自动化构建_第4张图片

稍等几分钟

手把手教你docker+jenkins+git+maven+harbor自动化构建_第5张图片
设置管理员账号
手把手教你docker+jenkins+git+maven+harbor自动化构建_第6张图片
继续下一步
手把手教你docker+jenkins+git+maven+harbor自动化构建_第7张图片
手把手教你docker+jenkins+git+maven+harbor自动化构建_第8张图片

二、配置Jenkins

手把手教你docker+jenkins+git+maven+harbor自动化构建_第9张图片
点击Manage Jenkins>Manage Plugins
手把手教你docker+jenkins+git+maven+harbor自动化构建_第10张图片

进入Manage Plugins>可使用插件>查找Mavan IntegrationPipeline Maven Configuration
手把手教你docker+jenkins+git+maven+harbor自动化构建_第11张图片

勾选安装完后,需要重启,再次登录

Mavan Integration成功安装后,进入Jenkins界面后,点击新建任务,可以看到多了一个maven项目
手把手教你docker+jenkins+git+maven+harbor自动化构建_第12张图片
Pipeline Maven Configuration成功安装后,进入Jenkins界面后,系统设置>全局工具配置,可以看到多了一个Pipeline Maven Configuration
手把手教你docker+jenkins+git+maven+harbor自动化构建_第13张图片

开放环境的一致性很重要,jenkins的编译环境需要与开发环境保持一致,放可确保编译不出错

首先看看自己的java开发环境的jdkmaven的版本,下载相应的安装包到/docker/jenkins该目录对应容器的/var/jenkins_home

如下图,直接解压即可,甚至,直接从原来的环境copy到这里都可以,只要确保是你需要的版本即可
手把手教你docker+jenkins+git+maven+harbor自动化构建_第14张图片
下一步是配置的关键,系统设置>全局工具配置,配置JDK、Maven

手把手教你docker+jenkins+git+maven+harbor自动化构建_第15张图片

jdk的新增加
手把手教你docker+jenkins+git+maven+harbor自动化构建_第16张图片
Maven的新增加
手把手教你docker+jenkins+git+maven+harbor自动化构建_第17张图片
注意上面的地址是容器内的地址,Name可以随便取一个相关的名

三、创建一个Maven项目

新建任务,选择构建一个Maven项目
手把手教你docker+jenkins+git+maven+harbor自动化构建_第18张图片
下午 输入代码库及登录账号密码
手把手教你docker+jenkins+git+maven+harbor自动化构建_第19张图片
构建触发器中,取消第一选项Build whenever a SNAPSHOT dependency is built,如果需要创建其他触发器,需要安装相应的插件
手把手教你docker+jenkins+git+maven+harbor自动化构建_第20张图片
设置构建选项
手把手教你docker+jenkins+git+maven+harbor自动化构建_第21张图片
Root POM选择根pom.xml,如果需要构建项目下的某个子项目责修改为相应的子目录下的pom.xml文件即可
Goals and options 可以添加构建选项,比如选择构建开发环境、测试环境、生成环境的配置,在pom.xml中 做了声明
如下所示

clean install -P <env_name1>  -D activeByDefault=true -D image.version=<version>

点击保存,创建完成后,点击立即构建
手把手教你docker+jenkins+git+maven+harbor自动化构建_第22张图片
则开始构建

当然,可以正常构建的前提是,你的项目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>

true 这里说明使用的是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地址

你可能感兴趣的:(docker,gitlab,1024程序员节,jenkins,maven,harobr)