jenkins持续集成入门18 - (Pipeline Script from SCM)流水线项目 用dockerfile-maven-plugin生成docker镜像并push到harbor私有仓库

前提或注意事项:


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 的位置讲一下

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值