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日

相关文章

  • 一文彻底弄懂加密货币价格波动的原因分析

    以下是“一文彻底弄懂加密货币价格波动的原因分析”的完整攻略: 一文彻底弄懂加密货币价格波动的原因分析 加密货币价格波动是一个非常普遍的现象,它受到许多因素的影响。下面是加密货币价格波动的原因分析。 市场供需关系 市场供需关系是加密货币价格波动的主要原因之一。当市场需求增加时,价格会上涨;当市场需求减少时,价格会下跌。同样,当市场供应增加时,价格会下跌;当市场…

    html 2023年5月18日
    00
  • Microsoft的XMLHTTP对象介绍

    Microsoft的XMLHTTP对象介绍 什么是XMLHTTP对象? XMLHTTP对象是指Microsoft.XMLHTTP或Microsoft.XMLHTTP.6.0。这是在Internet Explorer 5.5中引入的第一个版本。用于创建XMLHttpRequest对象,它是与服务器通信的基础。 如何创建XMLHTTP对象? 创建XMLHTTP对…

    html 2023年5月30日
    00
  • 麒麟9010怎么样 麒麟9010详细介绍

    以下是关于麒麟9010的详细介绍: 麒麟9010的概述 麒麟9010是华为公司推出的一款高端移动处理器,采用7nm工艺制造,拥有高性能和低功耗的特点。该处理器采用了三星的M4架构和Cortex-A55架构,配备了Mali-G76 GPU,支持5G网络和Wi-Fi 6技术,具有出色的图形处理和网络连接能力。 麒麟9010的性能 麒麟9010处理器的主频高达2.…

    html 2023年5月17日
    00
  • Javascript遍历Html Table示例(包括内容和属性值)

    下面是 Javascript 遍历 HTML Table 的完整攻略: 1. HTML Table 首先,我们需要一个 HTML Table,我们可以通过以下代码来创建一个 3 行 3 列的表格,其中每个单元格都有一个 class 属性为 “cell”: <table border="1"> <tr> <td…

    html 2023年5月30日
    00
  • 改进性能和样式的 24个 ASP 技巧第1/2页

    下面是“改进性能和样式的24个ASP技巧”攻略的详细讲解: 1. 使用缓存来提高网站性能 在ASP程序中,使用缓存可以显著提高网站性能。通过将反复获取的数据存储在缓存中,可以减少数据库查询的次数,从而减轻服务器的负担。在ASP中使用缓存非常简单,只需要调用Cache对象即可。下面是一个例子: <% ‘从数据库中获取数据 Dim rsData Set r…

    html 2023年5月30日
    00
  • Android apk反编译基础(apktoos)图文教程

    首先我们来详细讲解“Android apk反编译基础(apktoos)图文教程”的完整攻略。 一、前言 在进行apk应用开发或分析的时候,我们有时候需要对apk进行反编译以获取其中的代码、资源等信息。这个时候,APKTool这个工具就非常有用。APKTool是一个可以反编译和重新打包APK的开源工具,可以将一个APK文件解包为一个文件夹,包括资源文件和编译后…

    html 2023年5月30日
    00
  • 通过dom4j解析xml字符串(示例代码)

    首先我们需要了解什么是dom4j和XML。 Dom4j是Java中一种处理XML文件的框架,它能够方便地读取和操作XML文件。XML是一种标记语言,常用于表示数据和结构化文档。 在使用dom4j解析XML字符串时,我们需要先导入dom4j的jar包,并创建一个Document对象来表示XML文档。具体过程如下: 导入dom4j的jar包 我们可以在Maven…

    html 2023年5月30日
    00
  • xml文件的结构解读第1/2页

    XML文件的结构解读第1/2页 1. 什么是XML? XML全称为可扩展标记语言(Extensible Markup Language),是一种被设计用来传输和存储数据的标记语言。XML的出现使得不同应用之间的数据交换变得更加容易。因为XML是与平台无关的格式,所以不受操作系统、软件或设备的限制,这也是XML广受欢迎的原因。 2. XML的结构 XML文件由…

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