Steps
Ensure you have Tanzu Application Service for Kubernetes (TAS4K8s) running as shown below
$ kapp list Target cluster 'https://lemons.run.haas-236.pez.pivotal.io:8443' (nodes: a51852ac-e449-40ad-bde7-1beb18340854, 5+) Apps in namespace 'default' Name Namespaces Lcs Lca cf (cluster),build-service,cf-blobstore,cf-db, true 10d cf-system,cf-workloads,cf-workloads-staging, istio-system,kpack,metacontroller Lcs: Last Change Successful Lca: Last Change Age 1 apps Succeeded
Ensure you have GitLab running. In this example it's installed on a Kubernetes cluster but it doesn't have to be. All that matters here is that GitLab can access the API endpoint of your TAS4K8s install
$ helm ls -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION gitlab gitlab 2 2020-05-15 13:22:15.470219 +1000 AEST deployed gitlab-3.3.4 12.10.5
1. First let's create a basic Springboot application with a simple RESTful endpoint as shown below. It's best to use the Spring Initializer to create this application. I simply used the web and lombok dependancies as shown below.
Note: Make sure you select java version 11.
Spring Initializer Web Interface
Using built in Spring Initializer in IntelliJ IDEA.
package com.example.demo; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @RestController @Slf4j public class FrontEnd { @GetMapping("/") public String index () { log.info("An INFO Message"); return new Date().toString(); } }
2. Create an empty project in GitLab using the name "gitlab-TAS4K8s-boot-demo"
3. At this point this add our project files from step #1 above into the empty GitLab project repository. We do that as follows.
$ cd "existing project folder from step #1"
$ git init
$ git remote add origin http://gitlab.ci.run.haas-236.pez.pivotal.io/root/gitlab-tas4k8s-boot-demo.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master
Once done we now have out GitLab project repository with the files we created as part of the project setup
4. It's always worth running the code locally just to make sure it's working so if you like you can do that as follows
RUN:
$ ./mvnw spring-boot:run
CURL:
$ curl http://localhost:8080/
Tue Jun 16 10:46:26 AEST 2020
HTTPie:
papicella@papicella:~$
papicella@papicella:~$
papicella@papicella:~$ http :8080/
HTTP/1.1 200
Connection: keep-alive
Content-Length: 29
Content-Type: text/plain;charset=UTF-8
Date: Tue, 16 Jun 2020 00:46:40 GMT
Keep-Alive: timeout=60
Tue Jun 16 10:46:40 AEST 2020
5. Our GitLab project as no pipelines defined so let's create one as follows in the project root directory using the default pipeline name ".gitlab-ci.yml"
image: openjdk:11-jdk
stages:
- build
- deploy
build:
stage: build
script: ./mvnw package
artifacts:
paths:
- target/demo-0.0.1-SNAPSHOT.jar
production:
stage: deploy
script:
- curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx
- ./cf api https://api.system.run.haas-236.pez.pivotal.io --skip-ssl-validation
- ./cf auth $CF_USERNAME $CF_PASSWORD
- ./cf target -o apples-org -s development
- ./cf push -f manifest.yaml
only:
- master
Note: We have not defined any tests in our pipeline which we should do but we haven't written any in this example.
6. For this pipeline to work we will need to do the following
- Add a manifest.yaml file in the project root to deploy our simple Springboot RESTful application
---
applications:
- name: gitlab-TAS4K8s-boot-demo
memory: 1024M
instances: 1
path: ./target/demo-0.0.1-SNAPSHOT.jar
- Alter the API endpoint to match your TAS4K8s endpoint
- ./cf api https://api.system.run.haas-236.pez.pivotal.io --skip-ssl-validation
- Alter the target to use your ORG and SPACE within TAs4K8s.
- ./cf target -o apples-org -s development
This command shows you what your current CF CLI is targeted to so you can ensure you edit it with correct details
$ cf target api endpoint: https://api.system.run.haas-236.pez.pivotal.io api version: 2.150.0 user: pas org: apples-org space: development
7. For the ".gitlab-ci.yml" to work we need to define two ENV variables for our username and password. Those two are as follows which is our login credentials to TAS4K8s
- CF_USERNAME
- CF_PASSWORD
To do that we need to navigate to "Project Settings -> CI/CD - Variables" and fill in the appropriate details as shown below
8. Now let's add the two new files using git , add a commit message and push the changes
$ git add .gitlab-ci.yml
$ git add manifest.yaml
$ git commit -m "add pipeline configuration"
$ git push -u origin master
9. Navigate to GitLab UI "CI/CD -> Pipelines" and we should see our pipeline starting to run
10. If everything went well!!!
11. Finally our application will be deployed to TAS4K8s as shown below
$ cf apps Getting apps in org apples-org / space development as pas... OK name requested state instances memory disk urls gitlab-TAS4K8s-boot-demo started 1/1 1G 1G gitlab-tas4k8s-boot-demo.apps.system.run.haas-236.pez.pivotal.io gitlab-tas4k8s-demo started 1/1 1G 1G gitlab-tas4k8s-demo.apps.system.run.haas-236.pez.pivotal.io test-node-app started 1/1 1G 1G test-node-app.apps.system.run.haas-236.pez.pivotal.io $ cf app gitlab-TAS4K8s-boot-demo Showing health and status for app gitlab-TAS4K8s-boot-demo in org apples-org / space development as pas... name: gitlab-TAS4K8s-boot-demo requested state: started isolation segment: placeholder routes: gitlab-tas4k8s-boot-demo.apps.system.run.haas-236.pez.pivotal.io last uploaded: Tue 16 Jun 11:29:03 AEST 2020 stack: buildpacks: type: web instances: 1/1 memory usage: 1024M state since cpu memory disk details #0 running 2020-06-16T01:29:16Z 0.1% 118.2M of 1G 0 of 1G
12. Access it as follows.
$ http http://gitlab-tas4k8s-boot-demo.apps.system.run.haas-236.pez.pivotal.io
HTTP/1.1 200 OK
content-length: 28
content-type: text/plain;charset=UTF-8
date: Tue, 16 Jun 2020 01:35:28 GMT
server: istio-envoy
x-envoy-upstream-service-time: 198
Tue Jun 16 01:35:28 GMT 2020
Of course if you wanted to create an API like service you could use the source code at this repo rather then the simple demo shown here using OpenAPI.
https://github.com/papicella/spring-book-service
More Information
Download TAS4K8s
https://network.pivotal.io/products/tas-for-kubernetes/
GitLab
https://about.gitlab.com/
No comments:
Post a Comment