我有以下 YAML 文件。每次推送到分支时,它都应该拉取最新的代码、构建并重新启动服务。每次推送时它都会成功运行,但是当我通过 SSH 连接到服务器时,更改不会被拉取。当我运行
git pull origin dev
时,才会拉出更改。我在同一组织中的另一个存储库中有类似的 YAML 作为前端,并且它工作得很好。
name: Node.js CI
on:
push:
branches: [ "dev" ]
jobs:
build:
runs-on: self-hosted
strategy:
matrix:
node-version: [22.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: cd /home/ubuntu/<project-name>-dev/<projec-name>-backend
- run: git pull origin dev
- name: Save environment variables
run:
echo "PORT=4000" >> .env &&
echo "SOCKET_PORT=4002" >> .env
- name: Test environment variables
run:
cat .env
- run: npm ci
- run: CI='' && npm run build
- run: sudo systemctl restart <project-name>.service
附加信息:
我在组织中有两个存储库(用于前端和后端)。两者都部署在 EC2 上。最初,前端(主分支)只有一个操作和一个运行程序。现在,使用同一个运行器,我又添加了 3 个操作(前端开发、后端主要、后端开发),所有这些都显示了上述有问题的行为。
我本来期待:
dev
(工作)这里很多事情可能都是错误的,所以这里是我的建议,以更好地缩小问题范围。
working-directory
。您还应该注意,一步中的
cd
不会影响后续步骤。每一步都是一次新的 shell 调用。
我是这样写的:
name: Node.js CI
on:
push:
branches: [ "dev" ]
env:
PROJECT_DIR: /home/ubuntu/<project-name>-dev/<projec-name>-backend
jobs:
build:
runs-on: self-hosted
strategy:
matrix:
node-version: [22.x]
steps:
- uses: actions/checkout@v4
with:
path: ${{ env.PROJECT_DIR }}
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Save environment variables
run: |
echo "PORT=4000" >> .env &&
echo "SOCKET_PORT=4002" >> .env
working-directory: ${{ env.PROJECT_DIR }}
- name: Test environment variables
run:
cat .env
working-directory: ${{ env.PROJECT_DIR }}
- run: npm ci
working-directory: ${{ env.PROJECT_DIR }}
- run: CI='' && npm run build
working-directory: ${{ env.PROJECT_DIR }}
- run: sudo systemctl restart <project-name>.service
working-directory: ${{ env.PROJECT_DIR }}