zoukankan      html  css  js  c++  java
  • DevOps之docker自动化部署web应用

    devops项目开发过程中,为了统一前后端docker镜像的生成过程,统一用gradle构建。
    依赖的软件:npm,gradle,harbor,jdk
    本文介绍使用gradle构建前端应用需要的配置:

    项目根目录添加以下四个文件

    • settings.gradle
    rootProject.name = 'devops-portal'//自行修改
    ext{
      //优先级低,各模块docker-build时会覆写该参数
      dockerTag = "dev"
      dockerGroup = "devops"
    }
    
    • build.gradle
    buildscript {
      repositories {
        maven { url "http://.../repository/aliyun/" }
        mavenCentral()
      }
      dependencies {
        classpath "com.bmuschko:gradle-docker-plugin:3.2.1"
      }
    }
    
    plugins {
      id "com.moowork.node" version "1.1.1"
      id 'java'
    }
    apply plugin: 'com.bmuschko.docker-java-application'
    dependencies{
      compile group: 'org.gradle', name: 'gradle-tooling-api', version: '4.3'
    }
    
    buildDir="frontend"
    //调用npm run build命令的Gradle任务
    task npmBuild(type: NpmTask, dependsOn: npmInstall) {
      group = 'node'
      args = ['run', 'build']
    }
    //调用npm run dev
    task npmDev(type: NpmTask, dependsOn: npmInstall) {
      group = 'node'
      args = ['run', 'dev']
    }
    
    task cleanDocker(type: Delete) {
      delete fileTree("${buildDir}/docker") {
        include '**/*'
      }
    }
    task copyDockerfile(type: Copy) {
      group = "docker"
      dependsOn cleanDocker,npmBuild
      from "./dist","Dockerfile","default.conf"
      into "${project.buildDir}/docker"
    }
    docker{
      registryCredentials {
        url = 'http://docker-daemon:5678'
        username = 'devops-user'
        password = 'devops-user-passwd'
      }
    }
    import com.bmuschko.gradle.docker.tasks.image.*
    task buildImage(type: DockerBuildImage) {
      dependsOn copyDockerfile
      def destFile = file("frontend/docker/Dockerfile")
      group = "docker"
      inputDir = destFile.parentFile
      tags = [
        "harbor.anji-allways.com/${dockerGroup}/${project.name}:${dockerTag}".toString()
      ]
    }
    task tagImage(type: DockerTagImage,dependsOn: buildImage){
      imageId = ''
      repository = "harbor.anji-allways.com/${dockerGroup}/${project.name}"
      tag = "${dockerTag}"
      doFirst{
        imageId = buildImage.getImageId()
      }
    }
    task pushImage(type: DockerPushImage,dependsOn: tagImage){
      imageName = tagImage.repository
      tag =  tagImage.tag
    }
    
    
    • Dockerfile
    FROM harbor.anji-allways.com/library/nginx:1.10
    MAINTAINER owner@anji-allways.com.cn
    
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    COPY ./ /data/work/devops/
    COPY ./default.conf /etc/nginx/conf.d/
    ENV PORT 80
    CMD ["nginx","-g","daemon off;"]
    
    • nginx-config: default.conf
    server {
      listen 80;
      server_name localhost;
      #charset koi8-r;
      access_log /var/log/nginx/access.log main;
      location / {
        error_page 404 /index.html;
        root /data/work/devops;
        index index.html index.htm;
      }
      #error_page404/404.html;
      # redirect server error pages to the static page /50x.html
      #
      error_page 500 502 503 504/50x.html;
      location = /50x.html {
        root html;
      }
    }
    
    

    开发环境 docker部署应用

    1、生成镜像并上传:
     gradle pushImage -xTest -PdockerTag=dev1.0.3 -PdockerGroup=devops
    2、在开发服务器上执行如下命令:
     docker stop devops-portal && docker rm devops-portal
     docker run -p 8081:80 --name devops-portal harbor.anji-allways.com/devops/devops-portal:dev1.0.3 &
    3、访问 http://ip:8081/
    
  • 相关阅读:
    Flex从页面(*.swf)url获取参数
    Flex 国际化
    Flex自定义事件二
    Flex中为各种控件绑定远程XML数据
    arp spoofing on linux
    java定位内存泄漏点
    Drools 简单应用实例2
    制作back track linux usb启动盘
    xss漏洞学习
    nmap在实战中的高级应用
  • 原文地址:https://www.cnblogs.com/coding-now/p/14660603.html
Copyright © 2011-2022 走看看