私は初心者です。ググりながら動かして見た設定ですので注意してください
参考:GitLabにコミットしたら、FTPでサーバにアップロードする自動化を1分で行う方法。-『Git』 | webmanab.html/ウェブまなぶ
プロジェクト作成
$ npx -p gatsby-cli gatsby new hoge-site
$ cd hoge-site
$ npx gatsby develop
http://localhost:8000/ でサイトが立ち上がったので、これをGitLabのCI/CDでレンタルサーバーにftp転送してみます

ftp接続情報を設定
GitLabの左メニューの「Settings」>「CI/CD」>「Variables」を選択し、Key
とValue
にftp接続情報を設定し、「Save variables」をクリック
HOST | "hogefugaxxx.sakura.ne.jp" | |
USERNAME | "yourName" | |
PASSWORD | "yourPass" | |
LOCAL | "./public" | ローカルのデプロイしたいフォルダを指定 |
SERVER | "/home/hogefugaxxx/www/site/path" | デプロイしたいレンタルサーバー内のパス |

.gitlab-ci.yml
を設定
.gitlab-ci.yml
をプロジェクト直下に作成する
image: node
before_script:
- npm install
- npm run build
build:
script:
- apt-get update -qq && apt-get install -y -qq lftp
- lftp -c "set ftp:ssl-allow no; open -u $USERNAME,$PASSWORD $HOST; mirror -R $LOCAL $SERVER --parallel=10"
only:
- master
.gitlab-ci.yml
をコミットに含めた状態で、masterにpushやmergeなどすると、自動でgatsbyjsをビルドし、public
フォルダをレンタルサーバーにデプロイしてくれました

さくらのレンタルサーバーで行ったのですが、デフォルトで国外IPアドレスからのftpアクセスを制限しているようなので、そこも外さないとダメでした
また、.ftpaccess
を設置している場合も設定によってはgitlabのciからのftpアクセスができないので、そこも気をつけると良いと思いました。
見ていただいてありがとうございましたm(_ _)m