diff --git a/argo-workflows/build.yaml b/argo-workflows/build.yaml index 4aa32cb..a73b394 100644 --- a/argo-workflows/build.yaml +++ b/argo-workflows/build.yaml @@ -4,6 +4,16 @@ metadata: generateName: build-workflow- spec: entrypoint: main + arguments: + parameters: + - name: repo + value: https://gitea.marcin00.pl/pikram/user-microservice.git + - name: branch + value: main + - name: image + value: marcin00.azurecr.io/user-microservice:{{workflow.uid}} + - name: registry_server + value: marcin00.azurecr.io serviceAccountName: edu-agentpool volumeClaimTemplates: - metadata: @@ -12,42 +22,54 @@ spec: accessModes: [ "ReadWriteOnce" ] resources: requests: - storage: 1Gi + storage: 128Mi templates: # ๐Ÿ” Main steps sequence - name: main steps: - - name: checkout - template: git-checkout - arguments: {} - - - name: test-python - template: python-tests - - - name: build-and-test-image - template: docker-goss-test - - - name: deploy - template: push-docker-image + template: checkout + arguments: + parameters: + - name: repo + value: "{{workflow.parameters.repo}}" + - name: branch + value: "{{workflow.parameters.branch}}" + - - name: tests + template: tests + - - name: build-test-and-push-image + template: build-test-and-push-image # ๐Ÿ“ฆ GIT CHECKOUT - - name: git-checkout - script: + - name: checkout + inputs: + parameters: + - name: repo + - name: branch + container: image: alpine/git - command: [sh] - source: | - git clone https://gitea.marcin00.pl/pikram/user-microservice.git /workspace/repo - cd /workspace/repo - git checkout main + workingDir: /workspace + args: + - clone + - --depth + - "1" + - --branch + - "{{inputs.parameters.branch}}" + - --single-branch + - "{{inputs.parameters.repo}}" + - repo volumeMounts: - name: workspace mountPath: /workspace # ๐Ÿงช PYTHON TESTS - - name: python-tests + - name: tests script: image: python:3.11.7-alpine command: [sh] + workingDir: /workspace/repo/api source: | - cd /workspace/repo/api python3 -m venv env . env/bin/activate pip install -r requirements.txt pytest @@ -56,44 +78,52 @@ spec: - name: workspace mountPath: /workspace - # ๐Ÿณ BUILDS AND GOSS TESTS - - name: docker-goss-test - script: - image: docker:cli - command: [sh] - source: | - cd /workspace/repo - docker build -t ${DOCKER_IMAGE} . - - curl -s -L https://github.com/aelsabbahy/goss/releases/latest/download/goss-linux-amd64 -o goss - curl -s -L https://github.com/aelsabbahy/goss/releases/latest/download/dgoss -o dgoss - chmod +rx *goss +# ๐Ÿณ BUILDS AND GOSS TESTS + - name: build-test-and-push-image + container: + image: docker:dind + command: [sh, -c] + workingDir: /workspace/repo + args: + - | + dockerd-entrypoint.sh & + sleep 3 + docker build -t {{workflow.parameters.image}} . - export GOSS_OPTS="-f junit" - export GOSS_PATH=./goss - export GOSS_SLEEP=3 - ./dgoss run -e SQLALCHEMY_DATABASE_URI=sqlite:///:memory: ${DOCKER_IMAGE} > /workspace/goss_junit.xml + apk add --no-cache bash + + wget https://github.com/aelsabbahy/goss/releases/latest/download/goss-linux-amd64 -O goss + wget https://github.com/aelsabbahy/goss/releases/latest/download/dgoss -O dgoss + chmod +rx *goss + + export GOSS_OPTS="-f junit" + export GOSS_PATH=./goss + export GOSS_SLEEP=3 + ./dgoss run -e SQLALCHEMY_DATABASE_URI=sqlite:///:memory: {{workflow.parameters.image}} > /workspace/goss_junit.xml + + echo "===> Logging into ACR" + echo "$ACR_PASSWORD" | docker login {{workflow.parameters.registry_server}} -u $ACR_USERNAME --password-stdin + + echo "===> Pushing image to ACR" + docker push {{workflow.parameters.image}} env: - - name: DOCKER_IMAGE - value: marcin00.azurecr.io/user-microservice:$(WORKFLOW_ID) - volumeMounts: - - name: workspace - mountPath: /workspace - - # ๐Ÿš€ DEPLOY - - name: push-docker-image - script: - image: mcr.microsoft.com/azure-cli - command: [sh] - source: | - az login --identity - az acr login --name ${ACR_NAME} - docker push ${DOCKER_IMAGE} - env: - - name: ACR_NAME - value: marcin00 - - name: DOCKER_IMAGE - value: marcin00.azurecr.io/user-microservice:$(WORKFLOW_ID) + - name: ACR_USERNAME + valueFrom: + secretKeyRef: + name: acr-creds + key: username + - name: ACR_PASSWORD + valueFrom: + secretKeyRef: + name: acr-creds + key: password + securityContext: + privileged: true volumeMounts: - name: workspace mountPath: /workspace + - name: docker-library + mountPath: /var/lib/docker + volumes: + - name: docker-library + emptyDir: {}