python全程自动化跑数据迭代

1、底层镜像

root@nx-eks-ctl:/usr/local/src/zhdya/pythontest# cat Dockerfile
FROM python:3.9
RUN mkdir -p /usr/local/ck/
COPY requirements.txt /usr/local/ck/
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /usr/local/ck/
RUN pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ -r requirements.txt

root@nx-eks-ctl:/usr/local/src/zhdya/pythontest# cat requirements.txt
clickhouse_driver==0.2.4
numpy==1.23.0
pandas==1.4.3
pymysql==1.0.2
sqlalchemy==1.4.39

2、deploy.yml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: bigdatajob
  namespace: cron-jobs
spec:
  schedule: "*/5 * * * *"
  failedJobHistoryLimit: 2
  concurrencyPolicy: Forbid
  successfulJobHistoryLimit: 2
  startingDeadlineSeconds: 600
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: bigdatajob
            image: $IMAGE_NAME
            imagePullPolicy: IfNotPresent
            args:
            - "/bin/sh"
            - "-c"
            - "python /usr/local/ck/app.py"
          restartPolicy: OnFailure
          imagePullSecrets:
          - name: harborsecret

备注:

concurrencyPolicy:
Allow: 允许Jobs并发运行(默认)
Forbid: 禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
Replace: 替换,取消当前正在运行的作业并用新作业替换它
startingDeadlineSeconds: # 启动作业错误的超时时长

Jenkins自动化(HK线上):

def git_address = "https://gitlab.devops.xxxx.com/xxxx/go-demo.git" 
def git_auth = "56e9bfd7-7bae-4943-xxxx-51c9e14a0d91"

//Harbor私服地址
def harbor_url = "harbor-devops.xxxx.com"
//Harbor的项目名称
def harbor_project_name = "sparkx"
//Harbor的凭证
def harbor_auth = "c5391591-fa9f-4347-xxxx-56e50df47150"
//k8s的凭证
def k8s_auth = "9211c0f5-8ff7-439d-xxx-d9a15065c46e"
//启动时间
def start = new Date().format('yyyy-MM-dd HH:mm:ss')

//创建一个Pod的模板,label为jenkins-slave
podTemplate(label: 'jenkins-slave-bigdata', cloud: 'kubernetes', containers: [
    containerTemplate( 
        name: 'build-image',
        image: "harbor-devops.xxxx.com/library/docker:stable",
        ttyEnabled: true,
        command: 'cat'
        ),
    ],
    //需要将docker和kubectl挂在到pod中这样才可以在pod中与k8s进行联通操作。
    volumes: [
        hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    ]
)
{
    node("jenkins-slave-bigdata") {
        stage('Pull'){
            checkout([$class: 'GitSCM', branches: [[name: "${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
        }
        stage('Build-Image') {
            //定义newTag
            def newTag = sh(returnStdout: true,script: 'echo `date +"%Y%m%d%H%M"_``git describe --tags --always`').trim()
            
            container('build-image') {
                //build
                sh "docker build -t ${harbor_url}/${harbor_project_name}/bigdatajob:${newTag} ."
                
                //登录Harbor,并上传镜像
                withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')])
                {
                    //登录
                    sh "docker login -u ${username} -p ${password} ${harbor_url}"
                    //上传镜像
                    sh "docker push ${harbor_url}/${harbor_project_name}/bigdatajob:${newTag}"
                }
                
                //删除本地镜像
                sh "docker rmi -f ${harbor_url}/${harbor_project_name}/bigdatajob:${newTag}"
            }
            
            //更新相关参数至deploy文件
            def deploy_image_name = "${harbor_url}/${harbor_project_name}/bigdatajob:${newTag}"
            
            sh """
                sed -i 's#\$IMAGE_NAME#${deploy_image_name}#' deploy.yml
                cat deploy.yml
            """
        }
        stage('Deploy'){
            kubernetesDeploy(
                kubeconfigId: '9211c0f5-8ff7-xxx-a9d2-d9a15065c46e',
                configs: 'deploy.yml' 
            )
        }
        stage('Webhook') {
            wrap([$class: 'BuildUser']) {
                script {
                    BUILD_USER = "${env.BUILD_USER}"
                }
            }
            def head = "\"构建${JOB_NAME}:#${env.BUILD_ID}<font color=\\\"info\\\">成功</font>,详细信息如下:"
            def s1 = ">部署分支:<font color=\\\"comment\\\">${branch}</font>"
            def s2 = ">部署服务:<font color=\\\"comment\\\">cronJob-bigdata</font>"
            def execTime = start+"   "+new Date().format('yyyy-MM-dd HH:mm:ss')
            def s3 = ">部署时间:<font color=\\\"comment\\\">${execTime}</font>"
            def s4 = ">部署人:<font color=\\\"comment\\\">${BUILD_USER}</font>"
            def msg = "${head}"+"\n"+ "${s1}"+"\n"+"${s2}"+"\n"+"${s3}"+"\n"+"${s4}\""
            echo "${msg}"
            def body = "{ \"msgtype\": \"markdown\", \"markdown\": { \"content\": ${msg} } }"
            echo "${body}"
            httpRequest contentType: 'APPLICATION_JSON_UTF8', httpMode: 'POST', requestBody: "${body}", responseHandle: 'NONE', url: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=aa84fd2f-6346-xxxx-baa7-ae91b865d216', wrapAsMultipart: false
        }
    }
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!