git hook 自动拉取代码,然后打包项目

622 阅读2分钟

要实现当远程Git仓库有更新时,自动拉取代码并运行build指令,你可以结合Git的post-update钩子和npm的脚本来实现。这样,当远程仓库上的代码更新之后,会自动运行Vue项目的构建指令。

使用Git——post-update钩子。post-update钩子会在Git仓库的push操作后触发,无论是通过git push还是在远程仓库上进行的代码更改,只要更新了代码,该钩子就会执行。

以下是如何设置自动拉取代码并运行build指令的步骤:

  1. 进入Vue项目的根目录。
  2. 创建一个名为post-update的文件,并添加以下内容:
#!/bin/bash

# Save the current working directory
current_dir=$(pwd)

# Move to the Vue project directory
cd /path/to/your/vue/project

# Pull the latest changes from the remote repository
git pull origin master

# Check the exit status of the git pull command
if [ $? -ne 0 ]; then
  # If the pull fails, display an error message and exit
  echo "Git pull failed. Build aborted."
  exit 1
fi

# Run the Vue build command (replace this with your actual build command)
npm run build

# Check the exit status of the build command
if [ $? -ne 0 ]; then
  # If the build fails, display an error message and exit
  echo "Vue build failed. Build aborted."
  exit 1
fi

# Move back to the original directory
cd $current_dir

# Exit with success status
exit 0
  1. post-update文件添加执行权限:
chmod +x post-update
  1. post-update文件移动到.git/hooks/目录中:
mv post-update .git/hooks/

现在,每当有人在远程仓库上进行代码更改并推送(push)时,Git仓库会自动运行post-update钩子。该钩子会先在Vue项目目录下执行git pull来拉取最新代码,然后运行npm run build来编译Vue项目。

请确保在设置post-update脚本时,已经正确配置了Vue项目的构建命令,并且你的Vue项目目录中已经包含了package.json文件。

当你想指定只监听特定的分支(列如master分支)时可以这样构建指令

下面是针对master分支的post-update钩子脚本:

#!/bin/bash

# Get the current branch name
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

# Check if the current branch is 'master'
if [ "$current_branch" != "master" ]; then
  echo "Changes were pushed to a branch other than 'master'. Skipping build."
  exit 0
fi

# Save the current working directory
current_dir=$(pwd)

# Move to the Vue project directory
cd /path/to/your/vue/project

# Pull the latest changes from the remote 'master' branch
git pull origin master

# Check the exit status of the git pull command
if [ $? -ne 0 ]; then
  # If the pull fails, display an error message and exit
  echo "Git pull failed. Build aborted."
  exit 1
fi

# Run the Vue build command (replace this with your actual build command)
npm run build

# Check the exit status of the build command
if [ $? -ne 0 ]; then
  # If the build fails, display an error message and exit
  echo "Vue build failed. Build aborted."
  exit 1
fi

# Move back to the original directory
cd $current_dir

# Exit with success status
exit 0

使用这个脚本,只有在master分支有更新时,才会自动拉取代码并运行构建指令。如果有其他分支有更新,脚本会跳过构建操作。

请将/path/to/your/vue/project替换为你的Vue项目的实际路径,并确保已经正确配置了Vue项目的构建命令(npm run build 或其他构建命令)。在设置钩子脚本时,也请确认你的Vue项目目录中已经包含了package.json文件。

此外,与之前提到的post-update钩子一样,使用post-update钩子可能需要在远程仓库的服务器上进行设置,因为这是在服务器上运行的操作。