# Format JSON File to k8s configmaps in gitlab ```bash= ls gitlab-ci-template.yml .gitlab-ci.yml a-config .gitlab-ci.yml default.json temp.yaml deploy.sh b-config .gitlab-ci.yml default.json temp.yaml deploy.sh ``` `gitlab-ci-template.yml` ```yaml= .job_deploy_template: script: - pwd - cd $PROJECTNAME - set -x - cat ${FILENAME} | jq > format.json - export TT=$(cat $FILENAME) - cat temp.yaml | envsubst > final.yaml - sed -i -e '8,$s/^/ /' final.yaml - cat final.yaml - ./deploy.sh .job_checkt_json_format: script: - pwd - cd $PROJECTNAME - set -x - cat ${FILENAME} | jq > format.json - export TT=$(cat $FILENAME) - cat temp.yaml | envsubst > final.yaml - sed -i -e '8,$s/^/ /' final.yaml - cat final.yaml ``` `.gitlab-ci.yml` ```yaml= stages: - check - deploy include: - local: "/gitlab-ci-template.yml" - local: "/a-config/.gitlab-ci.yml" - local: "/b-config/.gitlab-ci.yml" ``` `a-config/.gitlab-ci.yml` ```yaml= check-json-a-config-batchjob: image: guanyebo/eks-dockerbuilder:non-entrypoint extends: .job_checkt_json_format stage: check variables: FILENAME: "default.json" PROJECTNAME: "a-config" tags: - runner rules: - changes: - a-config/default.json change-a-config-variables: image: guanyebo/eks-dockerbuilder:non-entrypoint extends: .job_deploy_template stage: deploy variables: FILENAME: "default.json" PROJECTNAME: "a-config" AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_QA} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY_QA} AWS_DEFAULT_REGION: ap-northeast-1 CLUSTERNAME: Clustername tags: - runner rules: - if: '$CI_COMMIT_BRANCH != "master"' when: never - changes: - a-config/default.json ``` `a-config/default.json` ```json= { "a-config": 123 } ``` `a-config/deploy.sh` ```bash= #!/bin/sh set -eu -o pipefail set -x aws sts get-caller-identity aws eks update-kubeconfig --name ${CLUSTERNAME} kubectl apply -f final.yaml ``` `b-config/.gitlab-ci.yml` ```yaml= check-json-b-config-batchjob: image: guanyebo/eks-dockerbuilder:non-entrypoint extends: .job_checkt_json_format stage: check variables: FILENAME: "default.json" PROJECTNAME: "b-config" tags: - runner rules: - changes: - b-config/default.json change-a-config-variables: image: guanyebo/eks-dockerbuilder:non-entrypoint extends: .job_deploy_template stage: deploy variables: FILENAME: "default.json" PROJECTNAME: "b-config" AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_QA} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY_QA} AWS_DEFAULT_REGION: ap-northeast-1 CLUSTERNAME: Clustername tags: - runner rules: - if: '$CI_COMMIT_BRANCH != "master"' when: never - changes: - b-config/default.json ``` `b-config/default.json` ```json= { "b-config": 123 } ``` `b-config/deploy.sh` ```bash= #!/bin/sh set -eu -o pipefail set -x aws sts get-caller-identity aws eks update-kubeconfig --name ${CLUSTERNAME} kubectl apply -f final.yaml ``` tip: - job name 不要相衝 - 此規則的邏輯為,如果 commit 的 branch 不是 matser 就不要執行這個 job ,如果要執行這這個 job ,必須為 mater commit 以及b-config/default.json 有做改變。 ```yaml= rules: - if: '$CI_COMMIT_BRANCH != "master"' when: never - changes: - b-config/default.json ```