Table of contents:
- Hello world
- Example project
- Supported Node.js versions
- Dependency caching
- Environment variables
- Browser testing
Example project with Node.js, TypeScript and React
Semaphore provides a tutorial and demo application with a working CI pipeline that you can use to get started quickly:
Supported Node.js versions
Semaphore supports all versions of Node.js. You have the following options:
- Linux: Node.js is available out-of-the-box in the Ubuntu 18.04 VM image.
- macOS: Node.js is available out-of-the-box in the macOS VM image.
- Docker: use semaphoreci/node or your own Docker image with the version of Node.js and other packages that you need.
Follow the links above for details on currently available language versions and additional tools.
Selecting a Node.js version on Linux
On Linux, Semaphore uses nvm to manage Node.js versions. Any version installable with
nvm is supported by Semaphore.
The version of Node.js that will be used can be set from a
.nvmrc file if such a file exists in your repository. If you want to make use of the
.nvmrc file you will need to run
nvm use so you can actually tell nvm to set the node version specified within the
Alternatively, you can change the Node.js version by calling
sem-version node. Here's an example:
blocks: - name: Tests task: prologue: commands: - sem-version node 10.13.0 jobs: - name: Tests commands: - node --version
If you need a version other than the preinstalled versions, then you can install it with
nvm. Here's an example:
blocks: - name: Tests task: prologue: commands: - nvm install --lts carbon - sem-version node --lts carbon jobs: - name: Tests commands: - node --version
If the version of Node.js that you need is not currently available in the Linux VM, we recommend running your jobs in a custom Docker image.
You can use Semaphores
cache command to store and load
node_modules. In the following configuration example, we install dependencies and warm the cache in the first block, then use the cache in subsequent blocks.
version: v1.0 name: First pipeline example agent: machine: type: e1-standard-2 os_image: ubuntu1804 blocks: - name: Install dependencies task: jobs: - name: npm install and cache commands: - checkout - cache restore node-modules-$SEMAPHORE_GIT_BRANCH-$(checksum package-lock.json),node-modules-$SEMAPHORE_GIT_BRANCH,node-modules-master - npm install - cache store node-modules-$SEMAPHORE_GIT_BRANCH-$(checksum package-lock.json) node_modules - name: Tests task: prologue: commands: - checkout - cache restore node-modules-$SEMAPHORE_GIT_BRANCH-$(checksum package-lock.json),node-modules-$SEMAPHORE_GIT_BRANCH,node-modules-master jobs: - name: Everything commands: - npm test
If you need to clear cache for your project, launch a debug session and execute
cache clear or
cache delete <key>.
Yarn is supported
Besides NPM, Semaphore also supports Yarn for managing Node.js dependencies.
To get started, use the configuration example above and replace
Semaphore doesn't set language specific environment variables like
NODE_ENV You should set these at the task level.
blocks: - name: Tests task: env_vars: - name: NODE_ENV value: test jobs: - name: Everything commands: - npm test
Refer to the Ubuntu image reference for details on pre-installed browsers and testing tools on Semaphore.