在 GitLab Piepeline 使用 TypeScript 當 script 使用

問題

本來在 GitLab Piepeline 主要使用 bash 寫 script, 簡單的還好處理,稍微複雜一點的邏輯,可讀性跟維護性都不高。 加上目前開發主要使用 TypeScript,所以就興起把 TypeScript 當 script 使用,取代 bash 的想法。

結果

GitLab Pipleline YAML 示範

使用 node.js image,不然要先安裝 node.js 相關的套件

image: node:12.16.1

stages:
  - run-script

run-script:
  stage: run-script
  before_script:
    - yarn global add typescript
    - yarn global add ts-node
    - yarn
  script:
    - ts-node helloworld.ts

說明

想要把 typescript 當 script,要安裝 typescript 及 ts-node 為了避免影響 local project 的 package.json,所以使用 global 安裝 為了區隔,在 yml 使用 before_script

前置準備

before_script:
  - yarn global add typescript
  - yarn global add ts-node

執行

script:
  - ts-node helloworld.ts

其它套件

如果要使用 fs 之類 node.js 的函式庫,需要安裝 @types/node,所以需要 package.json

{
  "dependencies": {
    "@types/node": "^14.11.1"
  }
}

似乎因為 ts 會去找 tsconfig.json 檔案,所以同層給一個檔案才不會跑掉 可以透過 tsc --init 產生檔案

檔案夾隔離

因為本身已經是 TypeScript 專案,所以相關的 script 放在獨立資料夾 ci 下。

完整版的 YAML

image: node:12.16.1

stages:
  - run-script

run-script:
  stage: run-script
  before_script:
    - yarn global add typescript
    - yarn global add ts-node
    - cd ci
    - yarn
    - cd ..
  script:
    - cd ci
    - ts-node main.ts
    - cd ..

留言