From 2245773953cd8d471fec3d8109bcb64bc0a1757d Mon Sep 17 00:00:00 2001 From: kimscott Date: Mon, 3 Feb 2020 15:12:49 +0900 Subject: [PATCH] =?UTF-8?q?azure=20pipeline=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DockerfileAutoBuild | 10 +++ azure-pipelines.yml | 146 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 DockerfileAutoBuild create mode 100644 azure-pipelines.yml diff --git a/DockerfileAutoBuild b/DockerfileAutoBuild new file mode 100644 index 0000000..97fa4c4 --- /dev/null +++ b/DockerfileAutoBuild @@ -0,0 +1,10 @@ +FROM maven:3.5.2-jdk-8-alpine AS MAVEN_TOOL_CHAIN +COPY pom.xml /tmp/ +COPY src /tmp/src/ +WORKDIR /tmp/ +RUN mvn package -B + +FROM openjdk:8u212-jdk-alpine +COPY --from=MAVEN_TOOL_CHAIN /tmp/target/*.jar app.jar +EXPOSE 8080 +ENTRYPOINT ["java","-Xmx400M","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=docker"] \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 0000000..6bfbf57 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,146 @@ +# Deploy to Azure Kubernetes Service +# Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service +# https://docs.microsoft.com/azure/devops/pipelines/languages/docker + +trigger: +- master + +resources: +- repo: self + +variables: +- group: common-value + # containerRegistry: 'event.azurecr.io' + # containerRegistryDockerConnection: 'acr' + # environment: 'aks.default' +- name: imageRepository + value: 'gateway' +- name: dockerfilePath + value: '**/Dockerfile' +- name: tag + value: '$(Build.BuildId)' + # Agent VM image name +- name: vmImageName + value: 'ubuntu-latest' +- name: MAVEN_CACHE_FOLDER + value: $(Pipeline.Workspace)/.m2/repository +- name: MAVEN_OPTS + value: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)' + + +stages: +- stage: Build + displayName: Build stage + jobs: + - job: Build + displayName: Build + pool: + vmImage: $(vmImageName) + steps: + - task: Cache@2 + inputs: + key: 'maven | "$(Agent.OS)" | **/pom.xml' + restoreKeys: | + maven | "$(Agent.OS)" + maven + path: $(MAVEN_CACHE_FOLDER) + displayName: Cache Maven local repo + - task: Maven@3 + inputs: + mavenPomFile: 'pom.xml' + options: '-Dmaven.test.skip=true -Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)' + javaHomeOption: 'JDKVersion' + jdkVersionOption: '1.8' + jdkArchitectureOption: 'x64' + goals: 'package' + - task: CopyFiles@2 + inputs: + SourceFolder: '$(system.defaultworkingdirectory)' + Contents: | + **/*.jar + Dockerfile + kubernetes/* + TargetFolder: '$(build.artifactstagingdirectory)' + - task: PublishBuildArtifacts@1 + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: 'artifact' + publishLocation: 'Container' + - task: Docker@2 + inputs: + containerRegistry: $(containerRegistryDockerConnection) + repository: $(imageRepository) + command: 'buildAndPush' + Dockerfile: '**/Dockerfile' + tags: | + $(tag) + +- stage: Deploy + displayName: Deploy stage + dependsOn: Build + + jobs: + - deployment: Deploy + displayName: Deploy + pool: + vmImage: $(vmImageName) + environment: $(environment) + strategy: + runOnce: + deploy: + steps: + - task: Kubernetes@1 + inputs: + connectionType: 'Kubernetes Service Connection' + namespace: 'default' + command: 'apply' + useConfigurationFile: true + configurationType: 'inline' + inline: | + apiVersion: apps/v1 + kind: Deployment + metadata: + name: $(imageRepository) + labels: + app: $(imageRepository) + spec: + replicas: 1 + selector: + matchLabels: + app: $(imageRepository) + template: + metadata: + labels: + app: $(imageRepository) + spec: + containers: + - name: $(imageRepository) + image: $(containerRegistry)/$(imageRepository):$(tag) + ports: + - containerPort: 8080 + secretType: 'dockerRegistry' + containerRegistryType: 'Azure Container Registry' + - task: Kubernetes@1 + inputs: + connectionType: 'Kubernetes Service Connection' + namespace: 'default' + command: 'apply' + useConfigurationFile: true + configurationType: 'inline' + inline: | + apiVersion: v1 + kind: Service + metadata: + name: $(imageRepository) + labels: + app: $(imageRepository) + spec: + ports: + - port: 8080 + targetPort: 8080 + selector: + app: $(imageRepository) + type: + LoadBalancer + secretType: 'dockerRegistry' + containerRegistryType: 'Azure Container Registry'