当前位置:   article > 正文

Jenkins上传镜像到Harbor_jenkins使用mvn构建将镜像推送到两个harbor自己仓库

jenkins使用mvn构建将镜像推送到两个harbor自己仓库

安装Jenkinshttps://www.jenkins.io/zh/doc/book/installing/

一、Docker安装

1、安装基础工具

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc

2、安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置Docker源

配置一个稳定(stable)的仓库、仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4、安装Docker CE

更新Yum安装的相关Docke软件包&安装Docker CE

yum update -y && yum install docker-ce

5、配置daemon.json文件

 创建目录

mkdir /etc/docker

配置daemon.json文件

  1. cat > /etc/docker/daemon.json <<EOF
  2. {"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"registry-mirrors": ["https://98zyayk8.mirror.aliyuncs.com"]}
  3. EOF

说明"registry-mirrors": ["https://98zyayk8.mirror.aliyuncs.com"]是配置镜像加速器

6、启动Docker

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

7、验证是否安装成功

docker --version

二、安裝Maven

1、下载

wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz

2、解压

tar -zxvf apache-maven-3.8.4-bin.tar.gz

3、环境变量配置

/etc/profile新增

  1. export MAVEN_HOME=/root/apache-maven-3.8.4
  2. export PATH=$MAVEN_HOME/bin:$PATH

配置生效

 source  /etc/profile

查看是否生效

mvn -v

三、安装Maven

下载

wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

解压

tar -zxvf apache-maven-3.3.9-bin.tar.gz

环境变量配置

/etc/profile

  1. export MAVEN_HOME=/root/apache-maven-3.3.9
  2. export PATH=$MAVEN_HOME/bin:$PATH

配置生效

source /etc/profile

是否生效

mvn -v

四、Docker安装Jenkins

前提安装Dcoker基础上,

1、执行命令

创建目录

mkdir -p /root/jenkins-data

创建容器

  1. docker run \
  2. -u root \
  3. -d \
  4. -p 8080:8080 \
  5. -p 50000:50000 \
  6. -v /root/jenkins-data:/var/jenkins_home \
  7. -v /var/run/docker.sock:/var/run/docker.sock \
  8. -v /root/apache-maven-3.3.9:/usr/local/maven \
  9. jenkinsci/blueocean

-d  可选)jenkinsci/blueocean 在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志

-p 8080:8080而最后一个代表容器的端口。因此,如果您为此选项指定 -p 49000:8080 ,您将通过端口49000访问主机上的Jenkins。
(可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。 如果您在其他机器上设置了一个或多个基于JNLP的Jenkins代理程序,而这些代理程序又与 jenkinsci/blueocean 容器交互(充当“主”Jenkins服务器,或者简称为“Jenkins主”), 则这是必需的。默认情况下,基于JNLP的Jenkins代理通过TCP端口50000与Jenkins主站


-p 50000:50000进行通信。 您可以通过“ 配置全局安全性” 页面更改Jenkins主服务器上的端口号。如果您要将您的Jenkins主机的JNLP代理端口的TCP端口 值更改为51000(例如),那么您需要重新运行Jenkins(通过此 docker run …​命令)并指定此“发布”选项 -p 52000:51000,其中最后一个值与Jenkins master上的这个更改值相匹配,第一个值是Jenkins主机的主机上的端口号, 通过它,基于JNLP的Jenkins代理与Jenkins主机进行通信 - 例如52000。
(可选,但强烈建议)映射在容器中的`/var/jenkins_home` 目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run ... 命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例

  -v /root/jenkins/jenkins-data:/var/jenkins_home : 所述的 jenkins-data 卷也可以 docker volume create命令创建: docker volume create jenkins-data 代替映射 /root/jenkins/jenkins-data 目录转换为Docker卷,还 可以将此目录映射到计算机本地文件系统上的目录。 例如,指定该选项 -v /root/jenkins/jenkins-data:/var/jenkins_home 会将容器的 /var/jenkins_home 目录映射到 本地计算机上目录中的 /root/jenkins/jenkins-data 目录


-v /var/run/docker.sock:/var/run/docker.sock(可选 /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent部分用 docker

2、查看是否启动正常

  1. [root@centos harbor]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. afc56f46c75f jenkinsci/blueocean "/sbin/tini -- /usr/…" 12 seconds ago Up 7 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp lucid_maxwell

3、查看密钥

  1. [root@centos apache-maven-3.8.4]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. e9e5e250b259 jenkinsci/blueocean "/sbin/tini -- /usr/…" 44 seconds ago Up 43 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp nostalgic_wing
  4. [root@centos apache-maven-3.8.4]# docker exec -it e9e5e250b259 /bin/bash
  5. bash-5.1# cat /var/jenkins_home/secrets/initialAdminPassword
  6. e0991b630c334d40bbe51c0027097cbc

进入容器  docker exec -it e9e5e250b259  /bin/bash

把密钥填入一下e0991b630c334d40bbe51c0027097cbc

4、浏览器访问http://192.168.23.145:8080/

Unlock Jenkins page

 5、选择安装推荐的插件

 6、创建管理员账户

 7、实例配置

界面点击保存并完成

  8、Jenkins已就绪

 五、安装插件

1、Maven插件安装

查找插件

 确认安装

结果

 六、全局工具配置JDK与Maven

1、JDK配置

 输入oracle完整账号

 2、Maven配置

  七、新建任务

1、配置/etc/docker/daemon.json

{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"registry-mirrors": ["https://98zyayk8.mirror.aliyuncs.com"],"insecure-registries":["harbor.register"]

2、配置/etc/hosts

  1. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  2. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  3. 192.168.23.170 harbor.register

3、新建任务

 4、配置Git

 5、构建

clean package docker:build

6、jenkins服务器登陆Harbor

  1. [root@centos ~]# docker login harbor.register
  2. Username: admin
  3. Password:
  4. WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
  5. Configure a credential helper to remove this warning. See
  6. https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  7. Login Succeeded

 7、/root/apache-maven-3.3.9/conf/settings.xm配置

  1. <server>
  2. <!--maven的pom中可以根据这个id找到这个server节点的配置-->
  3. <id>harbor-regisry</id>
  4. <!--远程harbor的用户名-->
  5. <username>admin</username>
  6. <!--远程harbor的密码-->
  7. <password>Harbor12345</password>
  8. <configuration>
  9. <email>admin@example.com</email>
  10. </configuration>
  11. </server>

 8、构建

 查看Harbor

说明依赖jdk需要公开

创建容器

docker run -di --name=rurekaserver -p:8000:8000 harbor.register/eurekaserver/eurekaserver:v1

 

 http://192.168.23.145:8000/

八、其他(git项目)

1、目录

2、EurekaserverApplication

  1. package com.example.eurekaserver;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @SpringBootApplication
  6. @EnableEurekaServer
  7. public class EurekaserverApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(EurekaserverApplication.class, args);
  10. }
  11. }

3、Dockerfile

  1. #定制的镜像基于java(这里java是jdk镜像,latest的版本)镜像
  2. FROM harbor.register/jdk/jdk1.8:v1
  3. #指定镜像创建者信息
  4. MAINTAINER zhuzq
  5. #其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的 /tmp
  6. VOLUME /tmp
  7. #把eurekaserver.jar 拷贝到容器eurekaserver.jar
  8. ADD eurekaserver.jar eurekaserver.jar
  9. #在容器启动程序
  10. ENTRYPOINT ["java","-jar","/eurekaserver.jar"]

4、application.yaml

  1. server:
  2. port: 8000
  3. eureka:
  4. instance:
  5. hostname: localhost # 指定Eureka主机
  6. client:
  7. register-with-eureka: false # 指定当前主机是否向Eureka服务器进行注册
  8. fetch-registry: false # 指定当前主机是否要从Eurka服务器下载服务注册列表
  9. service-url: # 服务暴露地址
  10. defaultZone: http://localhost:8000/eureka
  11. # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
  12. # server:
  13. # enable-self-preservation: false # 关闭自我保护

5、pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>eurekaserver</artifactId>
  7. <version>v1</version>
  8. <packaging>jar</packaging>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.1.7.RELEASE</version>
  13. <relativePath/> <!-- lookup parent from repository -->
  14. </parent>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.cloud</groupId>
  22. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-autoconfigure</artifactId>
  27. </dependency>
  28. <!-- JAXB,Java Architechture for Xml Binding,XML绑定的Java技术
  29. JDK678版本的不用导入以下依赖,但9及其以上版本需要导入-->
  30. <!-- <dependency>
  31. <groupId>javax.xml.bind</groupId>
  32. <artifactId>jaxb-api</artifactId>
  33. <version>2.2.11</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>com.sun.xml.bind</groupId>
  37. <artifactId>jaxb-core</artifactId>
  38. <version>2.2.11</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>com.sun.xml.bind</groupId>
  42. <artifactId>jaxb-impl</artifactId>
  43. <version>2.2.11</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>javax.activation</groupId>
  47. <artifactId>activation</artifactId>
  48. <version>1.1.1</version>
  49. </dependency>-->
  50. </dependencies>
  51. <dependencyManagement>
  52. <dependencies>
  53. <dependency>
  54. <groupId>org.springframework.cloud</groupId>
  55. <artifactId>spring-cloud-dependencies</artifactId>
  56. <version>${spring-cloud.version}</version>
  57. <type>pom</type>
  58. <scope>import</scope>
  59. </dependency>
  60. </dependencies>
  61. </dependencyManagement>
  62. <build>
  63. <finalName>eurekaserver</finalName>
  64. <plugins>
  65. <plugin>
  66. <groupId>org.springframework.boot</groupId>
  67. <artifactId>spring-boot-maven-plugin</artifactId>
  68. </plugin>
  69. <plugin>
  70. <groupId>com.spotify</groupId>
  71. <artifactId>docker-maven-plugin</artifactId>
  72. <version>1.0.0</version>
  73. <configuration>
  74. <!--用于指定镜像名称-->
  75. <imageName>harbor.register/eurekaserver/${project.artifactId}:${project.version}</imageName>
  76. <!-- 指定了Dockfile的目录,所以需要在项目的src/main下创建一个docker目录,并在其目录中配置Dockerfile文件 -->
  77. <dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
  78. <!--用于指定基础镜像,相当于Dockerfile中的FROM指令-->
  79. <baseImage>harbor.register/jdk/jdk1.8:v1</baseImage>
  80. <pushImage>true</pushImage>
  81. <!--指定harbor镜像仓库地址-->
  82. <serverId>harbor-regisry</serverId>
  83. <!-- <registryUrl>https://harbor.register/</registryUrl>-->
  84. <resources>
  85. <!--需要打包文件设置-->
  86. <resource>
  87. <targetPath>/</targetPath>
  88. <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->                            
  89. <directory>${project.build.directory}</directory>
  90. <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件-->                           
  91. <include>${project.build.finalName}.jar</include>
  92. </resource>
  93. </resources>
  94. </configuration>
  95. </plugin>
  96. </plugins>
  97. </build>
  98. </project>

参考

利用docker-maven-plugin自动化部署__wings的博客-CSDN博客_docker-maven-pluginhttps://blog.csdn.net/weixin_40760239/article/details/110078850?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164173605016780261949046%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fnavwordall.%2522%257D&request_id=164173605016780261949046&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~navwordall~first_rank_ecpm_v1~rank_v31_ecpm-2-110078850.first_rank_v2_pc_rank_v29&utm_term=jenkins&spm=1018.2226.3001.4187

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/582429
推荐阅读
相关标签
  

闽ICP备14008679号