Jenkins构建Docker镜像并推送至Harbor仓库的实现

实现Jenkins构建Docker镜像并推送至Harbor仓库主要包括以下步骤:

  1. 准备Dockerfile和相关资源文件

在项目中创建Dockerfile和相关资源文件,在Dockerfile中指定镜像的基础环境和相关依赖,以及打包的程序、文件等,同时也可以设置环境变量等。

例如,一个构建 Node.js 应用程序的 Dockerfile 可以有以下配置:

FROM node:12

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

ENV PORT=8080

EXPOSE 8080

CMD [ "npm", "start" ]
  1. 配置Jenkins

使用Jenkins作为持续集成/部署的工具,需要做一些基本配置,包括添加Docker和Harbor的凭证和配置插件等。此处以Jenkins的官方Docker镜像为例,具体步骤如下:

在Jenkins管理界面添加镜像凭证。

➜  ~ docker run --rm -u root -p 8080:8080 \
--name jenkins \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-jenkins/jenkins:lts

镜像凭证中需要输入Harbor的用户名和密码,在创建凭证时,也需要将Docker的凭证添加进去。

  1. 编写Jenkinsfile

可选的视觉工作流程规范,不过本次我们会使用Jenkinsfile,也可以用类Jenkinsfile的脚本来代替。

pipeline {
  agent any
  environment {
    DOCKER_REGISTRY = "harbor.example.com"
    DOCKER_REGISTRY_CRED = "harbor-cred"
    DOCKER_IMAGE = "my-image"
    IMAGE_TAG = "${GIT_BRANCH}-${BUILD_ID}"
  }
  stages {
    stage('Build') {
      steps {
        git 'https://github.com/username/my-app'
        script {
          docker.build("${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${IMAGE_TAG}", "-t ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest .")
        }
      }
      post {
        always {
          cleanWs()
        }
      }
    }
    stage('Publish') {
      steps {
        script {
          docker.withRegistry("https://${DOCKER_REGISTRY}", "${DOCKER_REGISTRY_CRED}") {
            docker.push("${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${IMAGE_TAG}")
            docker.push("${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest")
          }
        }
      }
    }
  }
}

在Docker镜像构建和推送的过程中,我们还需要注意以下几点:

  • 指定Docker镜像的名称和版本
  • 指定Docker镜像构建的路径
  • 在推送Docker镜像时,需要使用docker.withRegistry()和docker.push()方法。

示例1

下面是一个使用Jenkinsfile自动化构建和推送Docker镜像的示例。该示例基于Java编写,使用Maven构建应用程序。Dockerfile文件配置了一个基于OpenJDK 11的Docker镜像。

Dockerfile文件:

FROM openjdk:11

ADD target/my-app.jar my-app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "my-app.jar"]

Jenkinsfile文件:

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        git 'https://github.com/username/my-app.git'
        sh 'mvn install'
        sh 'docker build -t my-app .'
      }
    }
    stage('Push') {
      environment {
        registry = 'http://<harbor-host>:<harbor-port>'
        registryCredential = 'harbor'
        dockerImage = ''
      }
      steps{
        sh '/usr/bin/docker login -u $USER -p $PASS $registry'
        sh 'docker tag my-app $registry/$dockerImage'
        sh 'docker push $registry/$dockerImage'
      }
    }
  }
}

示例2

下面是一个使用Declarative Pipeline自动化构建和推送Docker镜像的示例。该示例基于Python编写,使用Pipenv构建应用程序。Dockerfile文件配置了一个基于Python 3.9的Docker镜像。

Dockerfile文件:

FROM python:3.9.6

WORKDIR /app

ADD Pipfile* /app/

RUN pip install pipenv && \
    pipenv install --system --deploy

ADD . /app

EXPOSE 8000

CMD gunicorn myapp:app -w 2 -b 0.0.0.0:8000

Jenkinsfile文件:

pipeline {
  agent any
  environment {
    dockerImage = 'my-app'
    dockerRegistry = 'http://<harbor-host>:<harbor-port>/'
  }
  stages {
    stage('Build') {
      steps {
        git 'https://github.com/username/my-app.git'
        withEnv(["PIPENV_VENV_IN_PROJECT=1"]) {
          sh "pipenv install"
          sh "pipenv run python -m py_compile *.py"
        }
        sh 'docker build -t $dockerRegistry${dockerImage}:${BUILD_NUMBER} .'
      }
    }
    stage('Publish') {
      when {
        branch 'development'
      }
      steps {
        withCredentials([usernamePassword(credentialsId: 'harbor-creds', passwordVariable: 'HARBOR_PASSWORD', usernameVariable: 'HARBOR_USERNAME')]) {
          sh "docker login -u $HARBOR_USERNAME -p $HARBOR_PASSWORD $dockerRegistry"
          sh "docker push $dockerRegistry${dockerImage}:${BUILD_NUMBER}"
        }
      }
    }
  }
}

以上就是基于Jenkins实现构建Docker镜像并推送至Harbor仓库的攻略,可以根据实际需求进行修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jenkins构建Docker镜像并推送至Harbor仓库的实现 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • mobaxterm怎么使用?MobaXterm使用图文教程

    MobaXterm是一款功能强大的远程终端软件,支持SSH、Telnet、RDP、VNC等多种协议,同时还集成了X11服务器和图形化SFTP客户端等实用工具。下面是MobaXterm的使用图文教程: 步骤1:下载和安装MobaXterm 打开MobaXterm官网(https://mobaxterm.mobatek.net/)。 点击“Download”按钮…

    html 2023年5月17日
    00
  • Mabitis中的#与$符号区别及用法介绍

    与$符号是在Mabitis框架中常用的符号,它们分别表示不同的含义和用法。 #符号 定义 在Mabatis框架中,#符号被用来表示一个占位符,可以将该占位符的值动态传入SQL语句中。#符号与$符号的区别在于#符号传入的值会被自动添加单引号,使得传入的值变成字符串类型,而$符号传入的值不会被添加单引号,则传入的值类型按照原本的类型。 示例 <select…

    html 2023年5月30日
    00
  • Java:DocumentBuilderFactory调用XML的方法实例

    Java:使用DocumentBuilderFactory调用XML的方法实例 在Java中,DocumentBuilderFactory是一个工厂类,用来创建DOM解析器对象。使用DocumentBuilderFactory,可以将XML文档解析为DOM对象。本文将介绍使用DocumentBuilderFactory来解析XML文档的方法,同时提供两个示例…

    html 2023年5月30日
    00
  • IOS 数据存储详解及实例代码

    IOS 数据存储详解及实例代码 在开发 IOS 应用程序时,数据存储是非常重要的一部分,因为应用程序需要记录用户的信息和应用程序状态。IOS 提供了几种数据存储选项,包括: Property List(属性列表) SQLite 数据库 Core Data User Defaults(用户默认设置) NSKeyedArchier Property List(属…

    html 2023年5月30日
    00
  • python 截取XML中bndbox的坐标中的图像,另存为jpg的实例

    首先需要明确一下问题。根据题目所描述的需求,似乎是希望从XML文件中截取出bndbox(边界框)的坐标信息,然后使用这些信息从对应的图像中截取出一部分区域,最终将该区域保存为JPG图片。因此,整个操作过程可以分为以下几步: 解析XML文件,获取bndbox的坐标信息; 使用坐标信息截取图像的部分区域; 将截取得到的区域保存为JPG图片。 下面分别介绍具体的实…

    html 2023年5月30日
    00
  • 怎么检查电脑主机上的USB端口好坏? 电脑USB接口是否损坏的查看方法

    要检查电脑主机上的USB端口是否好坏,可以按照以下步骤进行操作: 检查物理连接:首先,检查USB设备是否正确插入电脑主机的USB端口。如果USB设备无法插入端口,可能是端口损坏或者被异物堵塞。此时,可以使用手电筒等工具检查端口内部是否有异物或者损坏的部分。 检查设备管理器:其次,可以通过设备管理器检查USB端口是否正常工作。在Windows系统中,可以按下W…

    html 2023年5月17日
    00
  • 登陆注册页面该怎么设计? 注意这10个要点能迅速提高用户体验

    以下是关于如何设计登陆注册页面的攻略,包括10个要点,以及两个示例说明: 明确页面目的:登陆注册页面的主要目的是让用户完成注册或登陆操作。因此,页面设计应该简单明了,让用户能够快速完成操作。 突出重点:在页面设计中,应该突出重点,让用户能够快速找到需要的操作。例如,可以使用醒目的按钮或颜色来突出“注册”或“登陆”操作。 简化流程:尽可能简化注册或登陆流程,减…

    html 2023年5月17日
    00
  • 抖音怎么开通商品橱窗带货?怎么带货?

    以下是“抖音怎么开通商品橱窗带货?怎么带货?”的完整攻略: 抖音怎么开通商品橱窗带货? 在抖音上开通商品橱窗带货,需要先完成账号认证和店铺入驻。具体步骤如下: 步骤1:完成账号认证 在抖音上开通商品橱窗带货,需要先完成账号认证。用户可以在抖音个人中心中,选择“设置”-“账号与安全”-“实名认证”进行认证。 步骤2:店铺入驻 完成账号认证后,用户需要进行店铺入…

    html 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部