前提或注意事项:
a docker远程连接已开启
idea集成docker 实现远程连接,可视化操作_小哇-CSDN博客
b Harbor先建立好一个项目,名称为 haiwang
c jenkins中建立的项目名要和idea中maven的项目名称保持一致
d dockerfile-maven-plugin的权限
Jenkins使用docker-maven-plugin进行编译时发现没有权限 - if年少有为 - 博客园
正式开始创建项目:
1 用idea建立一个maven的springboot项目
2 在项目根目录下,新建文件 Dockerfile
#FROM java: 8
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 10086
ENTRYPOINT ["java","-jar","/app.jar"]
3 修改pom.xml文件,配置docker生成镜像的插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
4 在项目根目录下,新建文件 Jenkinsfile
//项目名称 (mvn中的和jenkins中的项目名要一致)
def project_name = "dockerimage_test"
//构建本地镜像版本的名称
def tag = "latest"
//Harbor私服地址
def harbor_url = "118.31.52.50:8001"
//Harbor的项目名称
def harbor_project_name = "haiwang"
//构建harbor镜像版本的名称
def harbor_tag = "v1"
node {
stage('拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-ssh-login', url: 'git@118.31.52.50:gitlab-instance-00716339/springboot_test_2.git']]])
}
stage('Build') {
//编译打包,并构建本地镜像
sh "mvn clean package -DskipTests dockerfile:build"
//镜像打标签,为发布到harbor私服做准备
sh "docker tag ${project_name}:${tag} ${harbor_url}/${harbor_project_name}/${project_name}:${harbor_tag}"
//生成的代码,将用户名和密码存储到凭证中,里面的语句可以调用其中的变量
withCredentials([usernamePassword(credentialsId: 'harbor-user-pwd', passwordVariable: 'password', usernameVariable: 'username')]) {
//登录到harbor私服
sh "docker login -u ${username} -p ${password} ${harbor_url}"
//push镜像到harbor私服
sh "docker push ${harbor_url}/${harbor_project_name}/${project_name}:${harbor_tag}"
}
//删除本地创建的镜像
sh "docker rmi -f ${project_name}:${tag}"
sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${project_name}:${harbor_tag}"
}
}
5 将项目push到gitlab中
6 在jenkins中新建项目,名称要保持一致,其它的操作就不多说了,生成代码withCredentials([usernamePassword(credentialsId 的位置讲一下