|
| 1 | +version: 0.2 |
| 2 | + |
| 3 | +env: |
| 4 | + variables: |
| 5 | + OS_DISTRIBUTION: alpine |
| 6 | + NODE_BINARY_LOCATION: "/usr/local/bin/node" |
| 7 | + NPX_BINARY_LOCATION: "/usr/local/bin/npx" |
| 8 | +batch: |
| 9 | + build-matrix: |
| 10 | + static: |
| 11 | + ignore-failure: false |
| 12 | + env: |
| 13 | + type: LINUX_CONTAINER |
| 14 | + privileged-mode: true |
| 15 | + dynamic: |
| 16 | + env: |
| 17 | + variables: |
| 18 | + DISTRO_VERSION: |
| 19 | + - "3.12" |
| 20 | + RUNTIME_VERSION: |
| 21 | + - "12" |
| 22 | + - "14" |
| 23 | +phases: |
| 24 | + pre_build: |
| 25 | + commands: |
| 26 | + - export IMAGE_TAG="nodejs-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}" |
| 27 | + - echo "Extracting and including the Runtime Interface Emulator" |
| 28 | + - SCRATCH_DIR=".scratch" |
| 29 | + - mkdir "${SCRATCH_DIR}" |
| 30 | + - tar -xvf test/integration/resources/aws-lambda-rie.tar.gz --directory "${SCRATCH_DIR}" |
| 31 | + - > |
| 32 | + cp "test/integration/docker/Dockerfile.programmatic.${OS_DISTRIBUTION}" \ |
| 33 | + "${SCRATCH_DIR}/Dockerfile.programmatic.${OS_DISTRIBUTION}.tmp" |
| 34 | + - > |
| 35 | + echo "RUN apk add curl" >> \ |
| 36 | + "${SCRATCH_DIR}/Dockerfile.programmatic.${OS_DISTRIBUTION}.tmp" |
| 37 | + - > |
| 38 | + echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \ |
| 39 | + "${SCRATCH_DIR}/Dockerfile.programmatic.${OS_DISTRIBUTION}.tmp" |
| 40 | + - > |
| 41 | + if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; |
| 42 | + then |
| 43 | + echo "DockerHub credentials not set as CodeBuild environment variables. Continuing without docker login." |
| 44 | + else |
| 45 | + echo "Performing DockerHub login . . ." |
| 46 | + docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD |
| 47 | + fi |
| 48 | + - echo "Building image ${IMAGE_TAG}" |
| 49 | + - > |
| 50 | + docker build . \ |
| 51 | + -f "${SCRATCH_DIR}/Dockerfile.programmatic.${OS_DISTRIBUTION}.tmp" \ |
| 52 | + -t "${IMAGE_TAG}" \ |
| 53 | + --build-arg RUNTIME_VERSION="${RUNTIME_VERSION}" \ |
| 54 | + --build-arg DISTRO_VERSION="${DISTRO_VERSION}" |
| 55 | + build: |
| 56 | + commands: |
| 57 | + - set -x |
| 58 | + - echo "Running Image ${IMAGE_TAG}" |
| 59 | + - docker network create "${OS_DISTRIBUTION}-network" |
| 60 | + - > |
| 61 | + docker run \ |
| 62 | + --detach \ |
| 63 | + -e "NODE_BINARY_LOCATION=${NODE_BINARY_LOCATION}" \ |
| 64 | + --name "${OS_DISTRIBUTION}-app" \ |
| 65 | + --network "${OS_DISTRIBUTION}-network" \ |
| 66 | + --entrypoint="" \ |
| 67 | + "${IMAGE_TAG}" \ |
| 68 | + sh -c '/usr/bin/aws-lambda-rie ${NODE_BINARY_LOCATION} index.js' |
| 69 | + - sleep 2 |
| 70 | + - > |
| 71 | + docker run \ |
| 72 | + --name "${OS_DISTRIBUTION}-tester" \ |
| 73 | + --env "TARGET=${OS_DISTRIBUTION}-app" \ |
| 74 | + --network "${OS_DISTRIBUTION}-network" \ |
| 75 | + --entrypoint="" \ |
| 76 | + "${IMAGE_TAG}" \ |
| 77 | + sh -c 'curl -X POST "http://${TARGET}:8080/2015-03-31/functions/function/invocations" -d "{}" --max-time 10' |
| 78 | + - actual="$(docker logs --tail 1 "${OS_DISTRIBUTION}-tester" | xargs)" |
| 79 | + - expected='success' |
| 80 | + - | |
| 81 | + echo "Response: ${actual}" |
| 82 | + if [[ "$actual" != "$expected" ]]; then |
| 83 | + echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" |
| 84 | + echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" |
| 85 | + echo |
| 86 | + docker logs "${OS_DISTRIBUTION}-app" |
| 87 | + echo |
| 88 | + echo "---------------------------------------------------" |
| 89 | + echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" |
| 90 | + echo |
| 91 | + docker logs "${OS_DISTRIBUTION}-tester" |
| 92 | + echo |
| 93 | + echo "---------------------------------------------------" |
| 94 | + exit -1 |
| 95 | + fi |
| 96 | + finally: |
| 97 | + - echo "Cleaning up..." |
| 98 | + - docker stop "${OS_DISTRIBUTION}-app" || true |
| 99 | + - docker rm --force "${OS_DISTRIBUTION}-app" || true |
| 100 | + - docker stop "${OS_DISTRIBUTION}-tester" || true |
| 101 | + - docker rm --force "${OS_DISTRIBUTION}-tester" || true |
| 102 | + - docker network rm "${OS_DISTRIBUTION}-network" || true |
0 commit comments