(借助ChatGPT)使用Jenkins +Jfrog 搭建自动化CI Pipeline

2,126 阅读3分钟

之前在《我是如何快速部署上线一个ChatGPT小程序的》文中, 提到了接下来我们会使用Jenkins搭建CI Pipeline,将镜像打包并上传到私有镜像仓库中的流水线作业自动化,本文就来分享下是如何做到的吧!  

流程图

流程图大致如下:

图片

  照例,来问问chatGPT具体该怎么实现吧!

图片

Nice!! 给出了大致的步骤,一会我们就按这个步骤来实践下

搭建 Jenkins

Install

参 考 www.digitalocean.com/community/t…

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg
sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
sudo systemctl start jenkins.service
sudo systemctl status jenkins.service
sudo ufw allow 8080

Get started

获取密码并安装插件

图片

图片

登录首页

image.png

搭建 Jfrog  Artifactory

Install with Docker

参考 www.jfrog.com/confluence/…

docker pull releases-docker.jfrog.io/jfrog/artifactory-pro:latest
docker volume create artifactory-data
docker run -d --name artifactory -p 8082:8082 -p 8081:8081 -v artifactory-data:/var/opt/jfrog/artifactory releases-docker.jfrog.io/jfrog/artifactory-pro:latest         

图片

Testing         

手动测试下,本地Push docker image 到Jfrog

docker login localhost:8081
docker tag  localhost:8081/hello-world localhost:8081/docker-local/hello-world:latest
docker push localhost:8081/docker-local/hello-world:latest

image.png

          

实现CI Pipeline

         

第一步,  Jenkins 安装 Docker、Artifactory等plugins

Manage Jenkins 设置”  -  “插件管理”  - 安装即可

image.png

第二步, Jenkins 添加 github token (获取git pull权限)

参考 plugins.jenkins.io/git/#plugin…

图片

第三步,创建Jenkins File 

编写脚本这么累的活,还是交给ChatGPT来吧 !

个Prompt版本

图片

由于我想使用Jenkins的Plugins来构建这些CI作业,而不是简单使用sh command,所以我又让chatGPT使用docker插件来重新回答一次

个Prompt版本

图片

整理后,编写Jenkinsfile如下,并放到Github Repo根目录中即可

pipeline {
  environment {
    imagename = "docker-local/christhai/chatgpt-bot"
    registryCredential = 'jenkins'
    dockerImage = ''
    artifactory = '10.0.0.87:8081'
  }
  agent any
  stages {
    stage('Cloning Git') {
      steps {
        git([url: 'https://github.com/christhai/chatgpt-bot.git', branch: 'main', credentialsId: 'jenkins-hai'])

      }
    }
    stage('Building image') {
      steps{
        script {
          dockerImage = docker.build imagename
        }
      }
    }

    stage('Push docker registry latest') {
      steps {
        script {
          withCredentials(
            [usernamePassword(
              credentialsId: 'docker-registry-credentials',
              passwordVariable: 'DOCKER_PASSWORD',
              usernameVariable: 'DOCKER_LOGIN')]
          ){
            echo 'Docker Login to Talend registry'
            sh '''
              #! /bin/bash
              set +x
              echo $DOCKER_PASSWORD | docker login http://${artifactory} -u $DOCKER_LOGIN --password-stdin
            '''
          }
          sh 'docker tag $imagename  ${artifactory}/${imagename}:latest'
          retry(3) {
            sh 'docker push ${artifactory}/$imagename:latest'
          }
        }
      }
    }
    stage('Remove Unused docker image') {
      steps{
         sh "docker rmi $imagename:latest"

      }
    }
  }
}

第四步, 创建 PIPELINE job   

1.新建个Item,选择“Pipeline”类型即可

图片

  1. 在Configuration中"pipeline"设置如下

image.png

图片

Demo

          

Jenkins Item创建后,就可以试着跑起来测试下!当我向Github Repo提交新代码之后, Jenkins会帮我自动触发一个新的Job, 来Build这个新的docker image,并且Push到我私有镜像仓库中。

         

图片

         

图片

可以看到这个image 出现在 docker-local 目录下         

图片

   成功!!      

写在最后

总结下,整个CI搭建过程还是很简单的,ChatGPT给出的具体步骤也很有参考性。现在有了这个Jenkins job之后, 这样我在每次迭代我的chatGPT小应用新版本时候,就不需要重复这些镜像打包上传等动作,可以直接更新K8S中Pod中镜像版本、即发布到线上!下文,我们再继续探讨下如何借助Flux或ArgoCD来构建CD流水线吧!

原文关注“云原生SRE”