Steps
Ensure you have Tanzu Application Service for Kubernetes (TAS4K8s) running as shown below.
$ kapp list Target cluster 'https://35.189.13.31' (nodes: gke-tanzu-gke-lab-f67-np-f67b23a0f590-abbca04e-5sqc, 8+) Apps in namespace 'default' Name Namespaces Lcs Lca certmanager-cluster-issuer (cluster) true 8d externaldns (cluster),external-dns true 8d harbor-cert harbor true 8d tas (cluster),cf-blobstore,cf-db,cf-system, false 8d cf-workloads,cf-workloads-staging,istio-system,kpack, metacontroller tas4k8s-cert cf-system true 8d Lcs: Last Change Successful Lca: Last Change Age 5 apps Succeeded
The demo exists on GitHub using the following URL, to follow along simply use your own GitHub repository making the changes as detailed below. The example below is for a Spring Boot application so your YAML file for the action would differ for non Java applications but there are many starter templates to choose from for other programming languages.
https://github.com/papicella/github-boot-demo
GitHub Actions help you automate your software development workflows in the same place you store code and collaborate on pull requests and issues. You can write individual tasks, called actions, and combine them to create a custom workflow. Workflows are custom automated processes that you can set up in your repository to build, test, package, release, or deploy any code project on GitHub
1. Create a folder at the root of your project source code as follows
$ mkdir ".github/workflows"
2. In ".github/workflows" folder, add a .yml or .yaml file for your workflow. For example, ".github/workflows/maven.yml"
3. Use the "Workflow syntax for GitHub Actions" reference documentation to choose events to trigger an action, add actions, and customize your workflow. In this example the YML "maven.yml" looks as follows.
maven.yml
name: Java CI with Maven and CD with CF CLI on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11.0.5 uses: actions/setup-java@v1 with: java-version: 11.0.5 - name: Build with Maven run: mvn -B package --file pom.xml - name: push to TAS4K8s env: CF_USERNAME: ${{ secrets.CF_USERNAME }} CF_PASSWORD: ${{ secrets.CF_PASSWORD }} run: | curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx ./cf api https://api.tas.lab.pasapples.me --skip-ssl-validation ./cf auth $CF_USERNAME $CF_PASSWORD ./cf target -o apples-org -s development ./cf push -f manifest.yaml
Few things here around the YML Workflow syntax for the GitHub Action above
- We are using a maven action sample which will FIRE on a push or pull request on the master branch
- We are using JDK 11 rather then Java 8
- 3 Steps exists here
- Setup JDK
- Maven Build/Package
- CF CLI Push to TAS4K8s using the built JAR artifact from the maven build
- We download the CF CLI into ubuntu image
- We have masked the username and password using Secrets
4. Next in the project root add a manifest YAML for deployment to TAS4K8s
- Add a manifest.yaml file in the project root to deploy our simple Spring boot RESTful application
---
applications:
- name: github-TAS4K8s-boot-demo
memory: 1024M
instances: 1
path: ./target/demo-0.0.1-SNAPSHOT.jar
5. Now we need to add Secrets to the Github repo which are referenced in out "maven.yml" file. In our case they are as follows.
- CF_USERNAME
- CF_PASSWORD
6. At this point that is all we need to test our GitHub Action. Here in IntelliJ IDEA I issue a commit/push to trigger the GitHub action
7. If all went well using "Actions" tab in your GitHub repo will show you the status and logs as follows
8. Finally our application will be deployed to TAS4K8s as shown below and we can invoke it using HTTPie or CURL for example
$ cf apps Getting apps in org apples-org / space development as pas... OK name requested state instances memory disk urls github-TAS4K8s-boot-demo started 1/1 1G 1G github-tas4k8s-boot-demo.apps.tas.lab.pasapples.me my-springboot-app started 1/1 1G 1G my-springboot-app.apps.tas.lab.pasapples.me test-node-app started 1/1 1G 1G test-node-app.apps.tas.lab.pasapples.me $ cf app github-TAS4K8s-boot-demo Showing health and status for app github-TAS4K8s-boot-demo in org apples-org / space development as pas... name: github-TAS4K8s-boot-demo requested state: started isolation segment: placeholder routes: github-tas4k8s-boot-demo.apps.tas.lab.pasapples.me last uploaded: Thu 18 Jun 12:03:19 AEST 2020 stack: buildpacks: type: web instances: 1/1 memory usage: 1024M state since cpu memory disk details #0 running 2020-06-18T02:03:32Z 0.2% 136.5M of 1G 0 of 1G $ http http://github-tas4k8s-boot-demo.apps.tas.lab.pasapples.me HTTP/1.1 200 OK content-length: 28 content-type: text/plain;charset=UTF-8 date: Thu, 18 Jun 2020 02:07:39 GMT server: istio-envoy x-envoy-upstream-service-time: 141 Thu Jun 18 02:07:39 GMT 2020
More Information
Download TAS4K8s
https://network.pivotal.io/products/tas-for-kubernetes/
GitHub Actions
https://github.com/features/actions
GitHub Marketplace - Actions
https://github.com/marketplace?type=actions