added make script and vars
This commit is contained in:
		
							
								
								
									
										15
									
								
								.vars
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.vars
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | #/usr/bin/env bash | ||||||
|  |  | ||||||
|  | export GIT_HOST=git.bjphoster.com | ||||||
|  | export DEPLOYMENT_HOST=docker.infra.bjphoster.cloud | ||||||
|  | export DEPLOYMENT_PATHS=/opt/yaskm.bjphoster.com | ||||||
|  | export GO_BUILDER=git.bjphoster.com/docker/gobuilder | ||||||
|  | export GO_VERSION=1.22.2-alpine3.19 | ||||||
|  | export GOOS=linux | ||||||
|  | export GOARCH=amd64 | ||||||
|  | export REPO_ORG=source | ||||||
|  | export REPO_NAME=yaskm | ||||||
|  | export CONTAINER_ORG=git.bjphoster.com/source | ||||||
|  | export CONTAINER_IMAGE=yaskm | ||||||
|  | export CONTAINER_IP=127.0.0.1 | ||||||
|  | export CONTAINER_PORT=3000 | ||||||
							
								
								
									
										59
									
								
								deploy.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								deploy.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | ### | ||||||
|  | # FLOW | ||||||
|  | ### | ||||||
|  | # | ||||||
|  | # convert deployment paths (string) into array of strings | ||||||
|  | # if path is not already set | ||||||
|  | # if number of paths > 1 print the strings with corresponding index | ||||||
|  | # get deployment path index from user | ||||||
|  | # in every case (number of paths = 1 OR index left blank from user), index is 0 | ||||||
|  | # if version is not already set | ||||||
|  | # get version from user | ||||||
|  | # if version is left balnk, version is "latest" | ||||||
|  | # get deployment path from index X of deployments | ||||||
|  | # ssh into deployment host | ||||||
|  | # cd into deployment path | ||||||
|  | # git pull last changes | ||||||
|  | # set correct version in .env file | ||||||
|  | # pull latest docker image and spin up containers | ||||||
|  | # | ||||||
|  |  | ||||||
|  | # Convert deployment paths into array | ||||||
|  | ENVIRONMENTS=($DEPLOYMENT_PATHS) | ||||||
|  |  | ||||||
|  | # Check if the DEPLOYMENT_PATH is not already set | ||||||
|  | if [ -z "${DEPLOYMENT_PATH}" ]; then | ||||||
|  |   # Print and ask for deployment environment (if more than one) | ||||||
|  |   if [ "${#ENVIRONMENTS[@]}" -gt 1 ]; then | ||||||
|  |     for i in "${!ENVIRONMENTS[@]}"; do | ||||||
|  |       echo "$i: ${ENVIRONMENTS[$i]}" | ||||||
|  |     done | ||||||
|  |     read -p "Deployment environment: " DEPLOYMENT_ENVIRONMENT | ||||||
|  |   fi | ||||||
|  |   if [ -z "${DEPLOYMENT_ENVIRONMENT}" ]; then | ||||||
|  |     DEPLOYMENT_ENVIRONMENT=0 | ||||||
|  |   fi | ||||||
|  |   # Select correct path | ||||||
|  |   DEPLOYMENT_PATH="${ENVIRONMENTS[$DEPLOYMENT_ENVIRONMENT]}" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Check if the DEPLOYMENT_VERSION is not already set | ||||||
|  | if [ -z "${DEPLOYMENT_VERSION}" ]; then | ||||||
|  |   # Ask for deployment version | ||||||
|  |   read -p "Version [latest]: " DEPLOYMENT_VERSION | ||||||
|  |   if [ -z "${DEPLOYMENT_VERSION}" ]; then | ||||||
|  |     DEPLOYMENT_VERSION=latest | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | echo "${DEPLOYMENT_PATH}" | ||||||
|  | echo "${DEPLOYMENT_VERSION}" | ||||||
|  |  | ||||||
|  | ssh $DEPLOYMENT_HOST \ | ||||||
|  |   "cd ${DEPLOYMENT_PATH} && \ | ||||||
|  |   git pull && \ | ||||||
|  |   sed -i "s/VERSION=.*/VERSION=${DEPLOYMENT_VERSION}/" .env && \ | ||||||
|  |   docker compose pull && \ | ||||||
|  |   docker compose up -d" | ||||||
							
								
								
									
										33
									
								
								dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | # Stage 1 · go builder | ||||||
|  | ARG GO_BUILDER=golang | ||||||
|  | ARG GO_VERSION=latest | ||||||
|  | FROM ${GO_BUILDER}:${GO_VERSION} AS build | ||||||
|  |  | ||||||
|  | ARG GO_OS | ||||||
|  | ARG GO_ARCH | ||||||
|  | ARG GIT_HOST | ||||||
|  | ARG REPO_ORG | ||||||
|  | ARG REPO_NAME | ||||||
|  | ARG APP_VERSION | ||||||
|  |  | ||||||
|  | # Copy the project inside the builder container | ||||||
|  | WORKDIR $GOPATH/src/${GIT_HOST}/$REPO_ORG/$REPO_NAME/ | ||||||
|  | COPY . . | ||||||
|  |  | ||||||
|  | # Build the binary | ||||||
|  | RUN CGO_ENABLED=0 GOOS=${GO_OS} GOARCH=${GO_ARCH} \ | ||||||
|  |     go build \ | ||||||
|  |     -installsuffix cgo \ | ||||||
|  |     -ldflags="-w -s -X 'main.APP_VERSION=${APP_VERSION}' -X 'main.COMMIT_ID=$(git log HEAD --oneline | awk '{print $1}' | head -n1)'" \ | ||||||
|  |     --o /app | ||||||
|  |  | ||||||
|  | # Stage 2 · scratch image | ||||||
|  | FROM scratch | ||||||
|  |  | ||||||
|  | # Copy the necessary stuff from the build stage | ||||||
|  | COPY --from=build /app /app | ||||||
|  | # Copy the certificates - in case of fetches | ||||||
|  | COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/cert.pem | ||||||
|  |  | ||||||
|  | # Execute the binary | ||||||
|  | ENTRYPOINT ["/app"] | ||||||
							
								
								
									
										54
									
								
								makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | #!make | ||||||
|  | include .vars | ||||||
|  |  | ||||||
|  | default: version | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	if [ "$$(docker images "$${CONTAINER_ORG}/$${CONTAINER_IMAGE}" --format "{{.Repository}}:{{.Tag}}")" != "" ]; then \ | ||||||
|  | 		docker image rm $$(docker images "$${CONTAINER_ORG}/$${CONTAINER_IMAGE}" --all --format "{{.Repository}}:{{.Tag}}"); \ | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | docker: clean | ||||||
|  | 	docker build \ | ||||||
|  | 	--build-arg GO_BUILDER=$${GO_BUILDER} \ | ||||||
|  | 	--build-arg GO_VERSION=$${GO_VERSION} \ | ||||||
|  | 	--build-arg GO_OS=$${GO_OS} \ | ||||||
|  | 	--build-arg GO_ARCH=$${GO_ARCH} \ | ||||||
|  | 	--build-arg GIT_HOST=$${GIT_HOST} \ | ||||||
|  | 	--build-arg REPO_ORG=$${REPO_ORG} \ | ||||||
|  | 	--build-arg REPO_NAME=$${REPO_NAME} \ | ||||||
|  | 	--build-arg APP_VERSION=$${APP_VERSION} \ | ||||||
|  | 	-t $${CONTAINER_ORG}/$${CONTAINER_IMAGE}:$${APP_VERSION} .; \ | ||||||
|  | 	if [ "$$(docker images --filter "dangling=true" --quiet --no-trunc)" != "" ]; then \ | ||||||
|  | 		docker image rm $$(docker images --filter "dangling=true" --quiet --no-trunc); \ | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | dockerpush: | ||||||
|  | 	docker push \ | ||||||
|  | 	$${CONTAINER_ORG}/$${CONTAINER_IMAGE}:$${APP_VERSION} | ||||||
|  |  | ||||||
|  | deploy: | ||||||
|  | 	bash -c "./deploy.sh" | ||||||
|  |  | ||||||
|  | version: | ||||||
|  | 	bash -c "./version.sh" | ||||||
|  |  | ||||||
|  | run: | ||||||
|  | 	docker run \ | ||||||
|  | 	--rm \ | ||||||
|  | 	--tty \ | ||||||
|  | 	--interactive \ | ||||||
|  | 	--publish $${CONTAINER_IP}:$${CONTAINER_PORT}:80 \ | ||||||
|  | 	--workdir /go/src/$${GIT_HOST}/$${REPO_ORG}/$${REPO_NAME} \ | ||||||
|  | 	--volume $(shell pwd):/go/src/$${GIT_HOST}/$${REPO_ORG}/$${REPO_NAME} \ | ||||||
|  | 	$${GO_BUILDER}:$${GO_VERSION} \ | ||||||
|  | 	go run . | ||||||
|  |  | ||||||
|  | dockerrun: | ||||||
|  | 	docker run \ | ||||||
|  | 	--rm \ | ||||||
|  | 	--tty \ | ||||||
|  | 	--interactive \ | ||||||
|  | 	--publish $${CONTAINER_IP}:$${CONTAINER_PORT}:80 \ | ||||||
|  | 	--volume $(shell pwd)/config.yml:/config.yml \ | ||||||
|  | 	$${CONTAINER_ORG}/$${CONTAINER_IMAGE}:latest | ||||||
							
								
								
									
										42
									
								
								version.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								version.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | ### | ||||||
|  | # FLOW | ||||||
|  | ### | ||||||
|  | # | ||||||
|  | # get version from user | ||||||
|  | # if version is left balnk, version is "latest" | ||||||
|  | # get docker push from user | ||||||
|  | # if docker push is left blank, it's negative | ||||||
|  | # if version != "latest" create version tag at current commit | ||||||
|  | # make the app | ||||||
|  | # if docker push, push docker image | ||||||
|  | # | ||||||
|  |  | ||||||
|  | # Get version from user | ||||||
|  | read -p "Version [latest]: " VERSIONINPUT | ||||||
|  | # If version was not provided, use the latest commit short hash as version | ||||||
|  | if [ -z ${VERSIONINPUT} ]; then | ||||||
|  |   APP_VERSION="latest" | ||||||
|  | else | ||||||
|  |   APP_VERSION=${VERSIONINPUT} | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Get docker push option from user | ||||||
|  | read -p "Docker push? [n]: " DOCKERPUSH | ||||||
|  | if [ -z ${DOCKERPUSH} ]; then | ||||||
|  |   DOCKERPUSH=n | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Create version tag (if provided) | ||||||
|  | if [ ! -z ${VERSIONINPUT} ]; then | ||||||
|  |   git tag ${APP_VERSION} | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Build the app | ||||||
|  | export APP_VERSION | ||||||
|  | make docker | ||||||
|  | # If wanted, push the docker image | ||||||
|  | if [ ${DOCKERPUSH} = "y" ]; then | ||||||
|  |   make dockerpush | ||||||
|  | fi | ||||||
		Reference in New Issue
	
	Block a user