You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CircleCI工作目录配置失败及项目构建报错求助

CircleCI流水线问题解决:工作目录配置与环境依赖

遇到的问题

  • 无法正确切换工作目录,导致任务找不到项目核心文件(如package.json、go.mod)
  • Alpine镜像环境中缺少make命令

当前配置文件

# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/2.0/configuration-reference
version: 2.1

jobs:
  api:
    working_directory: ~/api
    docker:
      - image: golang:1.19.3-alpine3.16
    steps:
        - checkout:
              path: ~/api
        - setup_remote_docker:
                docker_layer_caching: true

        - run: pwd
        - run: ls -all
        #- run: make mod-vendor
        - run: go get -v -t -d ./...
        - run: go test -v ./...
        - run: go build -o main .
        - deploy:
                command: |
                    if [ "${CIRCLE_BRANCH}" == "circle-ci-setup" ]; then
                      docker build -t ${DOCKER_REPO} .
                      docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} https://index.docker.io/v1/
                      docker push ${DOCKER_REPO}
                    fi
  client:
    working_directory: ~/client
    docker:
      - image: cimg/node:16.1.0
    steps:
        - checkout:
              path: ~/client
        - run: pwd
        - run: ls -all
        - run:
              name: Install Dependencies
              command: yarn install --immutable
        - save_cache:
              name: Save Yarn Package Cache
              key: yarn-packages-{{ checksum "yarn.lock" }}
              paths:
                  - .yarn/cache
                  - .yarn/unplugged
        - run:
                name: Installing the package.json dependencies
                command: yarn

        - run: yarn build
        - persist_to_workspace:
                root: .
                paths: dist

workflows:
  hobby-project-setup:
    jobs:
      - client
      - api

报错信息

Client任务报错

yarn run v1.22.10
error Couldn't find a package.json file in "/home/circleci/client"
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Exited with code exit status 1
CircleCI received exit code 1

API任务报错

#!/bin/sh -eo pipefail
cd api && go get -v -t -d ./...
go: go.mod file not found in current directory or any parent directory.
    'go get' is no longer supported outside a module.
    To build and install a command, use 'go install' with a version,
    like 'go install example.com/cmd@latest'
    For more information, see https://golang.org/doc/go-get-install-deprecation
    or run 'go help get' or 'go help install'.

Exited with code exit status 1

关键输出信息

ls -all输出(两个任务一致)

total 32
drwxr-xr-x    7 root     root          4096 Dec  4 12:12 .
drwx------    1 root     root            33 Dec  4 12:12 ..
drwxr-xr-x    2 root     root            24 Dec  4 12:12 .circleci
drwxr-xr-x    4 root     root            72 Dec  4 12:12 .git
-rw-r--r--    1 root     root            13 Dec  4 12:12 .gitignore
-rw-r--r--    1 root     root          1369 Dec  4 12:12 Makefile
drwxr-xr-x    6 root     root            95 Dec  4 12:12 api
-rw-r--r--    1 root     root          5302 Dec  4 12:12 api.swagger.json
drwxr-xr-x    5 root     root          4096 Dec  4 12:12 client
-rw-r--r--    1 root     root           424 Dec  4 12:12 digital-ocean-infra-config.sh
-rw-r--r--    1 root     root           263 Dec  4 12:12 docker-compose.yml
drwxr-xr-x    6 root     root           104 Dec  4 12:12 infra

API任务pwd输出

/root/api

Client任务pwd输出

/home/circleci/client

问题分析

从ls输出可见,整个仓库被克隆到了working_directory指定的路径下(如~/api),导致项目实际的代码目录(~/api/api、~/client/client)嵌套在工作目录内,后续命令直接在工作目录根执行,自然找不到package.json、go.mod等文件。

解决方案

1. 修正工作目录配置

调整每个任务的working_directory为对应项目的子目录,并将仓库克隆到父目录,确保任务默认在项目代码目录下执行:

jobs:
  api:
    # 直接指向项目代码所在的子目录
    working_directory: ~/repo/api
    docker:
      - image: golang:1.19.3-alpine3.16
    steps:
        # 将整个仓库克隆到父目录~/repo
        - checkout:
              path: ~/repo
        - setup_remote_docker:
                docker_layer_caching: true

        # 此时默认在~/repo/api目录下,直接执行命令即可找到go.mod
        - run: pwd
        - run: ls -all
        - run: go get -v -t -d ./...
        - run: go test -v ./...
        - run: go build -o main .
        - deploy:
                command: |
                    if [ "${CIRCLE_BRANCH}" == "circle-ci-setup" ]; then
                      docker build -t ${DOCKER_REPO} .
                      docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} https://index.docker.io/v1/
                      docker push ${DOCKER_REPO}
                    fi
  client:
    # 直接指向项目代码所在的子目录
    working_directory: ~/repo/client
    docker:
      - image: cimg/node:16.1.0
    steps:
        # 将整个仓库克隆到父目录~/repo
        - checkout:
              path: ~/repo
        - run: pwd
        - run: ls -all
        - run:
              name: Install Dependencies
              command: yarn install --immutable
        - save_cache:
              name: Save Yarn Package Cache
              key: yarn-packages-{{ checksum "yarn.lock" }}
              paths:
                  - .yarn/cache
                  - .yarn/unplugged
        - run:
                name: Installing the package.json dependencies
                command: yarn

        - run: yarn build
        - persist_to_workspace:
                root: .
                paths: dist

2. 安装make命令(解决Alpine镜像缺失问题)

在API任务的步骤开头添加安装命令,因为Alpine Linux默认不包含make:

jobs:
  api:
    # ... 其他配置不变
    steps:
        - checkout:
              path: ~/repo
        # 安装make及依赖
        - run: apk add --no-cache make
        # ... 后续步骤不变

这样修改后,任务会默认在正确的项目代码目录下执行,无需手动cd,同时也能使用make命令。

内容的提问来源于stack exchange,提问作者Mike3355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:10:17