I am not sure I understand what you mean, but if you are talking about whether the content of the "script:" block is better to be in a file, then in my opinion, yes it is better practice to source control such scripts in the material alongside the thing being built and deployed - rather than inside pipeline yaml.
This way it is easier to independently test the build/deploy steps, and when making changes you are guaranteed that the code and the deploy script are updated/version controlled together. Also makes it a lot easier to read the pipeline YAML. On Mon, Nov 4, 2024 at 7:58 PM Tanmoy santra <[email protected]> wrote: > Should we add scripts to a shell script file? > > On Monday, November 4, 2024 at 4:18:04 PM UTC+5:30 Chad Wilson wrote: > >> You might want to look at >> https://github.com/tomzo/gocd-yaml-config-plugin?tab=readme-ov-file#Validation >> >> The problem you have there is probably the `script:` task. Doesn't >> confirm to documented syntax: >> https://github.com/tomzo/gocd-yaml-config-plugin?tab=readme-ov-file#script >> >> Looks like you generated some nonsense with ChatGPT? :-) >> >> On Mon, Nov 4, 2024 at 6:35 PM Tanmoy santra <[email protected]> >> wrote: >> >>> format_version: 10 >>> pipelines: >>> build_3d_models_service: >>> group: 'defaultGroup' >>> label_template: '${Appname}-${ENV}-${GO_PIPELINE_COUNTER}' >>> parameters: >>> Appname: '3d-models-service' >>> Branch: 'master-java-21' # Default branch for the servercp repository >>> JavaVersion: '21' >>> ENV: 'staging-mumbai' # Deployment environment >>> environment_variables: >>> JAVA_HOME_21: '/usr/lib/jvm/java-21-openjdk' >>> MAVEN_HOME: '/usr/share/java/maven' >>> # AWS credentials should be set securely via GoCD environment variables >>> or secrets >>> materials: >>> dockerfiles: >>> git: >>> url: '[email protected]:metiseduventures/adda-store-k8s.git' >>> branch: 'dockerfile-adda-devo-21' >>> destination: dockerfiles >>> servercp: >>> git: >>> url: '[email protected]:metiseduventures/servercp.git' >>> branch: '${Branch}' >>> destination: servercp >>> deployment_repo: >>> git: >>> url: '[email protected]:metiseduventures/adda-store-k8s.git' >>> branch: '${ENV}' >>> destination: deployment_repo >>> stages: >>> - name: BuildAndDeploy >>> jobs: >>> - name: BuildAndPush >>> tasks: >>> - script: >>> shell: bash >>> command: | >>> #!/bin/bash >>> set -e # Exit immediately if a command exits with a non-zero status >>> >>> # **Set up environment variables** >>> echo "Setting up environment variables..." >>> if [ "${ENV}" == "production" ]; then >>> accountid="490891715875" >>> else >>> accountid="436568657448" >>> fi >>> DOCKERHUB_USERNAME="${accountid}.dkr.ecr.ap-south-1.amazonaws.com" >>> APP_NAME="${Appname}" >>> BUILD_TIME=$(date +"%d-%h_%H:%M:%S") >>> IMAGE_TAG="${GO_PIPELINE_COUNTER}-${Branch}-${ENV}-${BUILD_TIME}" >>> IMAGE_NAME="${DOCKERHUB_USERNAME}/${APP_NAME}" >>> >>> # Set JAVA_HOME based on JavaVersion >>> if [ "${JavaVersion}" == "21" ]; then >>> export JAVA_HOME="${JAVA_HOME_21}" >>> fi >>> >>> export PATH=$JAVA_HOME/bin:${MAVEN_HOME}/bin:$PATH >>> >>> echo "JAVA_HOME is set to ${JAVA_HOME}" >>> echo "Maven home is set to ${MAVEN_HOME}" >>> >>> # **Ensure GOCD_WORKING_DIR is set** >>> if [ -z "${GOCD_WORKING_DIR}" ]; then >>> export GOCD_WORKING_DIR=$(pwd) >>> fi >>> >>> # **Build Dependencies** >>> >>> echo "Building dependencies..." >>> >>> # Build common-search-dto >>> cd "${GOCD_WORKING_DIR}/servercp/common-search-dto" >>> mvn clean install >>> >>> # Build commons-parent >>> cd "${GOCD_WORKING_DIR}/servercp/commons-parent" >>> git checkout 'ha-release-skills-21' >>> git pull origin 'ha-release-skills-21' >>> mvn clean install >>> >>> # Return to working directory >>> cd "${GOCD_WORKING_DIR}" >>> >>> # **Build Main Application** >>> >>> echo "Building main application ${APP_NAME}..." >>> >>> cd "${GOCD_WORKING_DIR}/servercp/models/${APP_NAME}" >>> mvn clean install -Dmaven.test.skip=true >>> >>> # **Build and Push Docker Image** >>> >>> echo "Building and pushing Docker image..." >>> cd "${GOCD_WORKING_DIR}/servercp/models/${APP_NAME}/target" >>> cp "${GOCD_WORKING_DIR}/dockerfiles/Dockerfile.${APP_NAME}" . >>> cp "${GOCD_WORKING_DIR}/dockerfiles/.dockerignore" . >>> >>> # AWS ECR login >>> aws ecr get-login-password --region ap-south-1 | docker login --username >>> AWS --password-stdin "${DOCKERHUB_USERNAME}" >>> >>> # Build and push Docker image using Buildx >>> docker buildx build --platform linux/amd64,linux/arm64 \ >>> -t "${IMAGE_NAME}:${IMAGE_TAG}" \ >>> -f "Dockerfile.${APP_NAME}" . --push >>> >>> # Export variables for next tasks >>> echo "IMAGE_NAME=${IMAGE_NAME}" >> "$GOCD_ENV_FILE" >>> echo "IMAGE_TAG=${IMAGE_TAG}" >> "$GOCD_ENV_FILE" >>> >>> - script: >>> shell: bash >>> command: | >>> #!/bin/bash >>> set -e # Exit immediately if a command exits with a non-zero status >>> >>> # **Update Deployment Files in GitHub** >>> >>> echo "Updating deployment files in GitHub..." >>> >>> # Ensure GOCD_WORKING_DIR is set >>> if [ -z "${GOCD_WORKING_DIR}" ]; then >>> export GOCD_WORKING_DIR=$(pwd) >>> fi >>> >>> # Set variables >>> DEPLOY_REPO_DIR='deployment_repo' >>> BRANCH_NAME="${ENV}" >>> DEPLOYMENT_FILE="3d-models-servicestaging-mumbai.yml" >>> >>> # Navigate to the deployment repository >>> cd "${GOCD_WORKING_DIR}/${DEPLOY_REPO_DIR}" >>> >>> # Ensure we're on the correct branch >>> git checkout "${BRANCH_NAME}" >>> git pull origin "${BRANCH_NAME}" >>> >>> # Update deployment file >>> # Replace the image tag in the deployment file >>> sed -i "s|^\(\s*image:\s*\).*|\1${IMAGE_NAME}:${IMAGE_TAG}|" >>> "${DEPLOYMENT_FILE}" >>> >>> # Commit and push changes >>> git config user.email "email" >>> git config user.name "name" >>> git add "${DEPLOYMENT_FILE}" >>> git commit -m "Update ${Appname} image to ${IMAGE_TAG}" >>> git push origin "${BRANCH_NAME}" >>> >>> echo "Deployment files updated successfully." >>> >>> # Optional: Send notification after updating deployment files >>> - script: >>> shell: bash >>> command: | >>> #!/bin/bash >>> # **Send Slack Notification** >>> echo "Sending Slack notification..." >>> curl --location --request POST ' >>> https://chat.googleapis.com/v1/spaces/AAAAteeAa0k/messages?key=your-key&token=your-token' >>> \ >>> --header 'Content-Type: application/json' \ >>> --data-raw '{"text":"Deployment of '${Appname}' with Tag '${IMAGE_TAG}' >>> in '${ENV}' Environment started. Deployment files updated."}' >>> using this getting this error - >>> >>> - pipeline.gocd.yaml; 1. Failed to parse pipeline >>> build_3d_models_service; class java.util.LinkedHashMap cannot be cast to >>> class java.lang.String (java.util.LinkedHashMap and java.lang.String are >>> in >>> module java.base of loader 'bootstrap') ----- How to fix this error? >>> and what is the error? >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "go-cd" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion visit >>> https://groups.google.com/d/msgid/go-cd/6f5d1a8c-df8e-48a4-8109-9423d2c503efn%40googlegroups.com >>> <https://groups.google.com/d/msgid/go-cd/6f5d1a8c-df8e-48a4-8109-9423d2c503efn%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "go-cd" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/go-cd/1a20f86e-6434-4894-93bf-25f9bb28d3e9n%40googlegroups.com > <https://groups.google.com/d/msgid/go-cd/1a20f86e-6434-4894-93bf-25f9bb28d3e9n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "go-cd" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/go-cd/CAA1RwH8VLxdF2nagbW_LcqpWkENNr-j%3DkGc6v62aM3CH2KKT3w%40mail.gmail.com.
