代码之家  ›  专栏  ›  技术社区  ›  Pasha

如何在buildspec.yml中正确定义stage和commands?

  •  0
  • Pasha  · 技术社区  · 5 年前

    目前,我期待着将我自己的项目迁移到AWS,我已经上传到CodeCommit。下一步是利用代码管道&用于构建和测试目的的代码构建。

    我用Java编写了一个简单的微服务 build.gradle

    buildscript {
        repositories {
            mavenCentral()
            gradlePluginPortal()
        }
        dependencies {
            classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE'
            classpath 'com.bmuschko:gradle-docker-plugin:4.2.0'
        }
    }
    
    apply plugin: 'idea'
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'com.bmuschko.docker-spring-boot-application'
    
    compileJava {
        sourceCompatibility = 11
        targetCompatibility = 11
    }
    
    group 'com.polubentcev.messenger'
    version '1.0'
    
    docker {
        springBootApplication {
            baseImage = 'openjdk:11-jre-slim'
        }
    }
    
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
    }
    
    def messengerVersion = '1.0'
    def springBootVersion = '2.1.2.RELEASE'
    
    dependencies {
        compile 'com.polubentcev.messenger:messenger-util-model:'+messengerVersion
        compile 'org.springframework.boot:spring-boot-starter-web:'+springBootVersion
        compile 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:2.1.0.RELEASE'
        compile 'org.springframework.cloud:spring-cloud-starter-config:2.1.0.RELEASE'
        compile 'org.springframework.boot:spring-boot-starter-data-jpa:'+springBootVersion
        compile 'org.springframework.boot:spring-boot-starter-security:'+springBootVersion
        compile 'org.springframework.kafka:spring-kafka:2.2.3.RELEASE'
        compile 'org.springframework.cloud:spring-cloud-starter-oauth2:2.1.0.RELEASE'
        compile 'org.springframework.security.oauth:spring-security-oauth2:2.3.4.RELEASE'
        compile 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.2.RELEASE'
        compile 'org.postgresql:postgresql:42.2.5'
        compileOnly 'org.projectlombok:lombok:1.18.4'
        annotationProcessor 'org.projectlombok:lombok:1.18.4'
        testCompile 'org.springframework.boot:spring-boot-starter-test:'+springBootVersion
    }
    

    buildspec.yml CodeDeploy的文件,以便运行单元测试并从中构建docker映像。

    0 回复  |  直到 5 年前
        1
  •  3
  •   Milan Cermak    5 年前

    我在一个项目中使用了一个buildspec.yml文件来构建Docker映像并将其推送到 ECR

    version: 0.2
    
    phases:
      pre_build:
        commands:
          - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
          - COMMIT_HASH="$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)"
          - IMAGE_TAG="${COMMIT_HASH:=latest}"
          - printenv
    
      build:
        commands:
          - docker build -f infrastructure/Dockerfile -t $REPOSITORY_URI:latest .
          - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
    
      post_build:
        commands:
          - docker push $REPOSITORY_URI:latest
          - docker push $REPOSITORY_URI:$IMAGE_TAG
          - export IMAGE_NAME='projectName'
          - export IMAGE_URI=$REPOSITORY_URI:$IMAGE_TAG
          - "printf '[{\"name\":\"%s\",\"imageUri\":\"%s\"}]' \"$IMAGE_NAME\" \"$IMAGE_URI\" > imagedefinitions.json"
    
    
    artifacts:
      files:
        - imagedefinitions.json
    

    我希望它能帮助你开始。你显然需要根据自己的需要修改它。检查 buildspec syntax 如果要添加更多阶段。

    我使用 aws/codebuild/docker:17.09.0 CodeBuild项目的图像。我通过考试 $REPOSITORY_URI 我的代码管道中的环境变量。看起来有点像 123456789012.dkr.ecr.us-east-1.amazonaws.com/projectName .

    这个 imagedefinitions.json 然后在以后的代码管道阶段使用,将映像部署到Fargate。