Jenkins - K8s + Ansible + Pipeline部署Docker脚本

Jenkins - K8s + Ansible + Pipeline部署Docker脚本

Dockerfile 文件

# openjdk 8u222
FROM openjdk:8u222-jre

MAINTAINER 组织名称
LABEL description=XXXX平台

# 设置环境常量
ENV TZ=Asia/Shanghai \
    # 工作目录名
    WORKPATH=/部署项目名称

# 工作目录
WORKDIR /usr/local/workspace/$WORKPATH

# 拷贝Jar
ADD ./*.jar ./app.jar

# 切换为上海时区
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone

# 启动镜像
ENTRYPOINT ["java", "-Dfile.encoding=utf-8", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
CMD ["--spring.profiles.active=dev"]

# 暴露端口
EXPOSE 8080

Ansible Host 文件

[开发环境]
10.0.0.111 ansible_connection=ssh ansible_ssh_user=用户名  ansible_ssh_pass=用户密码 host1=host1:10.0.0.20 host2=host2:10.0.0.21 host3=host3:10.0.0.22 host4=host4:10.0.0.23


Jenkins Pipeline 代码

pipeline {
    agent {
        node {
          label 'haimaxy-jnlp'
        }
    }
    environment {
        JAVA_HOME = '/data/projects/jenkins-home/opt/env/jdk/jdk8u292-b10'
        MAVEN_HOME = '/data/projects/jenkins-home/opt/env/maven/apache-maven-3.6.3'
        DOCKER_REPOSITORY_HOST = 'registry.cn-beijing.aliyuncs.com'
        DOCKER_REPOSITORY_USERNAME = 'Docker仓库账号'
        DOCKER_REPOSITORY_PASSWORD = 'Docker仓库密码'
        ORG_NAME = '组织名称'
        ANSIBLE_HOSTS_PATH = 'AnsibleHost文件路径'
        DEPLOY_PROJECT = '部署项目名称'
        DEPLOY_ENV = 'prod'
    }

    parameters {
        gitParameter(name: 'GIT_TAG', 
                     type: 'PT_TAG',
                     branchFilter: 'origin/(.*)',
                     defaultValue: 'master',
                     selectedValue: 'DEFAULT',
                     sortMode: 'DESCENDING_SMART',
					 description: '请选择代码标签')		 
		choice(name: 'SERVER', choices: ['开发服务器'], description: '部署服务器')			 
		string(name: 'JVM', defaultValue: '', description: 'JVM 配置')
		string(name: 'PORT', defaultValue: '8080:8080', description: '端口 配置')	
    }
    stages {
        stage('git checkout') {
            steps {
                checkout([$class: 'GitSCM', 
                          branches: [[name: "${params.GIT_TAG}"]], 
                          doGenerateSubmoduleConfigurations: false, 
                          extensions: [], 
                          submoduleCfg: [], 
                          userRemoteConfigs: [[url: '项目Git地址', credentialsId: '1658a146-5944-4702-9fb8-f36ee3008222',]]
                        ])
            }
        }
        stage('code build') {
            steps {
                sh '''
                ls
                ${MAVEN_HOME}/bin/mvn clean package -Dmaven.test.skip=true
                '''
            }
        }
        stage('docker build and push') {
            steps {
                sh '''
                CURR_IMAGE=${ORG_NAME}/${DEPLOY_PROJECT}:${GIT_TAG}
                REPOSITORY=${DOCKER_REPOSITORY_HOST}/${CURR_IMAGE}
                
                # 打包镜像 发布到云仓库
                cd docker-build
                docker build -t ${CURR_IMAGE} .
                docker tag ${CURR_IMAGE} ${REPOSITORY}
                docker login --username=${DOCKER_REPOSITORY_USERNAME} --password=${DOCKER_REPOSITORY_PASSWORD}  ${DOCKER_REPOSITORY_HOST}
                docker push ${REPOSITORY}
                '''
            }
        }
        stage('remote docker deploy') {
            steps {
sh '''
CURR_IMAGE=${ORG_NAME}/${DEPLOY_PROJECT}:${GIT_TAG}
REPOSITORY=${DOCKER_REPOSITORY_HOST}/${CURR_IMAGE}

# 制作部署配置文件
cat >> deploy.yaml << EOF
- hosts: ${SERVER}
  tasks:
    - name: 启动镜像
      tags: back_code
      shell: |
        
        sudo docker login --username=${DOCKER_REPOSITORY_USERNAME} --password=${DOCKER_REPOSITORY_PASSWORD}  ${DOCKER_REPOSITORY_HOST}
        
        # 清除镜像
        sudo docker rm -f ${DEPLOY_PROJECT}
        sudo docker rmi -f ${REPOSITORY}
        
        docker pull ${REPOSITORY}
        
        sudo docker run  -p ${PORT} --name ${DEPLOY_PROJECT} --restart=on-failure \
            -v /data/logs/:/usr/local/workspace/${DEPLOY_PROJECT}/logs \
            -v /data/var/${DEPLOY_PROJECT}/:/usr/local/workspace/${DEPLOY_PROJECT}/var \
            --add-host={{host1}} \
            --add-host={{host2}} \
            --add-host={{host3}} \
            --add-host={{host4}} \
            -d ${REPOSITORY} \
            --spring.profiles.active=${DEPLOY_ENV} ${JVM}
EOF

# 执行远程命令
ansible-playbook deploy.yaml -i ${ANSIBLE_HOSTS_PATH} 

'''
            }
        }
    }
}


本文由 在码圈 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
原文链接:https://www.bedebug.com/archives/jenkins-k8s-docker-deploy
最后更新于:2022-02-16 10:20:12

请博主喝咖啡 ☕.