Skip to content

eclass/semantic-release-ssh-commands

Repository files navigation

@eclass/semantic-release-ssh-commands

npm Node.js CI downloads dependencies devDependency Status Coverage Status Maintainability semantic-release

semantic-release plugin to deploy app with ssh commands

Step Description
verifyConditions Verify the presence of the SSH_USER, SSH_HOST environment variables.
publish Deploy app over ssh.

Install

npm i -D @eclass/semantic-release-ssh-commands

Usage

The plugin can be configured in the semantic-release configuration file:

{
  "plugins": [
    "@semantic-release/changelog",
    "@semantic-release/npm",
    "@semantic-release/git",
    "@semantic-release/gitlab",
    [
      "@eclass/semantic-release-ssh-commands",
      {
        "verifyConditionsCmd": "bash verify.sh",
        "publishCmd": "bash deploy.sh ${nextRelease.version}",
      }
    ]
  ]
}

NOTE: verify.sh and deploy.sh are script located in remote server

Configuration

Environment variables

Variable Description
SSH_USER A ssh user
SSH_HOST A ssh host
SSH_PRIVATE_KEY Content of private ssh key (Optional)

Options

Variable Description
verifyConditionsCmd A command to verificate. Required. Ex: "docker pull myuser/myapp" or "bash verify.sh"
publishCmd A command to publish new release. Required. Ex: "bash deploy.sh ${nextRelease.version}"

Examples

{
  "plugins": [
    "@semantic-release/changelog",
    "@semantic-release/npm",
    "@semantic-release/git",
    "@semantic-release/gitlab",
    [
      "@eclass/semantic-release-ssh-commands",
      {
        "verifyConditionsCmd": "bash verify.sh",
        "publishCmd": "bash deploy.sh ${nextRelease.version}"
      }
    ]
  ]
}
# .gitlab-ci.yml
release:
  image: node:alpine
  stage: release
  before_script:
    - apk add --no-cache git openssh-client
    - mkdir -p /root/.ssh
    - chmod 0700 /root/.ssh
    - ssh-keyscan $SSH_HOST > /root/.ssh/known_hosts
    - echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa
    - chmod 600 /root/.ssh/id_rsa
    - echo "    IdentityFile /root/.ssh/id_rsa" >> /etc/ssh/ssh_config
  script:
    - npx semantic-release
  only:
    - master
# .travis.yml
language: node_js
cache:
  directories:
    - ~/.npm
node_js:
  - "12"
stages:
  - test
  - name: deploy
    if: branch = master
jobs:
  include:
    - stage: test
      script: npm t
    - stage: deploy
      addons:
        ssh_known_hosts: $SSH_HOST
      before_deploy:
        - eval "$(ssh-agent -s)"
        - echo "$SSH_PRIVATE_KEY" > /tmp/deploy_rsa
        - chmod 600 /tmp/deploy_rsa
        - ssh-add /tmp/deploy_rsa
      script: npx semantic-release

License

MIT