B
B
bengur22021-10-03 12:56:44
GitLab
bengur2, 2021-10-03 12:56:44

Gitlab Auto DevOps - why is the new build the same as the old one?

I 'm using the standard Node.js+Express project template .

I work in a branch dev.
After the commit, Auto DevOps is launched and a container is created.
It is uploaded to the Gitlab Container Registry, now there are 0 .
pBmXQqd.png

Successfully build from Build.gitlab-ci.yml file .
For the build, this script is called:

/build/build.sh
#!/bin/bash -e
# build stage script for Auto-DevOps
if ! docker info &>/dev/null; then
  if [ -z "$DOCKER_HOST" ] && [ "$KUBERNETES_PORT" ]; then
    export DOCKER_HOST='tcp://localhost:2375'
  fi
fi
if ; then
  echo "Logging in to GitLab Container Registry with CI credentials..."
  echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
fi
image_previous="$CI_APPLICATION_REPOSITORY:$CI_COMMIT_BEFORE_SHA"
image_tagged="$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG"
image_latest="$CI_APPLICATION_REPOSITORY:latest"
if ; then
  builder=${AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDER:-"heroku/buildpacks:18"}
  echo "Building Cloud Native Buildpack-based application with builder ${builder}..."
  buildpack_args=()
  if ; then
    buildpack_args=('--buildpack' "$BUILDPACK_URL")
  fi
  env_args=()
  if ; then
    mapfile -t env_arg_names < <(echo "$AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES" | tr ',' "\n")
    for env_arg_name in "${env_arg_names[@]}"; do
      env_args+=('--env' "$env_arg_name")
    done
  fi
  pack build tmp-cnb-image \
    --builder "$builder" \
    "${env_args[@]}" \
    "${buildpack_args[@]}" \
    --env HTTP_PROXY \
    --env http_proxy \
    --env HTTPS_PROXY \
    --env https_proxy \
    --env FTP_PROXY \
    --env ftp_proxy \
    --env NO_PROXY \
    --env no_proxy
  cp /build/cnb.Dockerfile Dockerfile
  docker build \
    --build-arg source_image=tmp-cnb-image \
    --tag "$image_tagged" \
    --tag "$image_latest" \
    .
  docker push "$image_tagged"
  docker push "$image_latest"
  exit 0
fi
if ; then
  echo "Building Dockerfile-based application using '${DOCKERFILE_PATH}'..."
else
  export DOCKERFILE_PATH="Dockerfile"
  if ; then
    echo "Building Dockerfile-based application..."
  else
    echo "Building Heroku-based application using gliderlabs/herokuish docker image..."
    erb -T - /build/Dockerfile.erb > "${DOCKERFILE_PATH}"
  fi
fi
if ; then
  echo "Unable to find '${DOCKERFILE_PATH}'. Exiting..." >&2
  exit 1
fi
build_secret_args=''
if ; then
  build_secret_file_path=/tmp/auto-devops-build-secrets
  "$(dirname "$0")"/export-build-secrets > "$build_secret_file_path"
  build_secret_args="--secret id=auto-devops-build-secrets,src=$build_secret_file_path"
  echo 'Activating Docker BuildKit to forward CI variables with --secret'
  export DOCKER_BUILDKIT=1
fi
echo "Attempting to pull a previously built image for use with --cache-from..."
docker image pull --quiet "$image_previous" || \
  docker image pull --quiet "$image_latest" || \
  echo "No previously cached image found. The docker build will proceed without using a cached image"
# shellcheck disable=SC2154 # missing variable warning for the lowercase variables
# shellcheck disable=SC2086 # double quoting for globbing warning for $build_secret_args and $AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS
docker build \
  --cache-from "$image_previous" \
  --cache-from "$image_latest" \
  $build_secret_args \
  -f "$DOCKERFILE_PATH" \
  --build-arg BUILDPACK_URL="$BUILDPACK_URL" \
  --build-arg HTTP_PROXY="$HTTP_PROXY" \
  --build-arg http_proxy="$http_proxy" \
  --build-arg HTTPS_PROXY="$HTTPS_PROXY" \
  --build-arg https_proxy="$https_proxy" \
  --build-arg FTP_PROXY="$FTP_PROXY" \
  --build-arg ftp_proxy="$ftp_proxy" \
  --build-arg NO_PROXY="$NO_PROXY" \
  --build-arg no_proxy="$no_proxy" \
  $AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS \
  --tag "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" \
  --tag "$image_latest" .
docker push "$image_tagged"
docker push "$image_latest"


The container has appeared:
Ib4PD1h.png

I run it on VPS (port 27073):
sudo docker run -d -p $PUBLIC_PORT:5000 $CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:latest


Check that the container is running:
[email protected]:~$ sudo docker container ls
CONTAINER ID   IMAGE                                            COMMAND                  CREATED          STATUS          PORTS
7258f2b4b44c   registry.gitlab.com/company/project/dev:latest   "docker-entrypoint.s…"   55 seconds ago   Up 42 seconds   0.0.0.0:27073->5000/tcp, :::27073->5000/tcp


Checking what it returns:
[email protected]:~$ curl http://localhost:27073
<!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>


That's right, the Express greeting is displayed .
Now in the index.js file I replace the line with Express 2 :
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express 2' });
});


I perform all the previous steps, another container appears:
S9MgzxV.png

On the VPS, I delete the old container.
I start a new one (see the CONTAINER ID column).
[email protected]:~$ sudo docker container ls
CONTAINER ID   IMAGE                                           COMMAND                  CREATED          STATUS          PORTS
d841d98c026b   registry.gitlab.com/rolesuhub/node/dev:latest   "docker-entrypoint.s…"   35 seconds ago   Up 23 seconds   0.0.0.0:27073->5000/tcp, :::27073->5000/tcp


But it displays the old Express label .
[email protected]:~$ curl http://localhost:27073
<!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>


We are waiting for the inscription Express 2 .
What have I done wrong?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander Karabanov, 2021-10-03
@bengur2

You launch a new container from the old image.
Never use the laest tag, only a specific tag, if you want to avoid such special effects.
The latest tag was not created for these purposes, but for example, to get cached layers, but not to launch.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question