Dealing with ambiguity of the terms publish vs. deploy
The terms are actually quite well defined and some authors are simply making a mess of things by using a term like 'publish' for deployment, in cases where publishing a website for example constitutes for their own process also a deployment, as there is no extra deployment step after publishing. Sometimes they use word publishing both for uploading and publishing together as all of their artifacts are public. That creates unnecessary confusion. Just to make it clear, here are the definitions:

Environment Definitions:


  
  build environment - Environment setup for build process.
  runtime environment - Environment setup for execution process (test/staging/production).
  


Artifact Lifecycle Stages:


  
  building - process of creating an artifact in build environment
  uploading - moving artifact from build environment to repository.
  publishing - making artifact in repository public.
  downloading - moving artifact from repository to runtime environment
  installing - applying artifact to runtime environment
  deploying - using artifact in runtime environment
  delivery - making artifact (effects) available to customer
  


Note: People often use any of those terms to mean one or more of the previous terms together.