2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Continuous DeliveryするためにGitLab RunnerからSSH接続

Last updated at Posted at 2021-09-05

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

GitLab CI/CDパイプラインで外部のサーバーにSSH接続してCD(Continuous Delivery)したかった。

以下を参考にしました。

Using SSH keys with GitLab CI/CD | GitLab
https://docs.gitlab.com/ee/ci/ssh_keys/

GitLab Runnerで任意のSSH接続を行いたい - Qiita
https://qiita.com/fukasawah/items/9c257f0bc2dfe1d6823f

OpenSSHの警告メッセージを黙らせる – Siguniang's Blog
https://siguniang.wordpress.com/2014/02/28/get-rid-of-openssh-warning-message/

1. .gitlab-ci.yaml

以下の様な.gitlab-ci.yamlになりました。

.gitlab-ci.yaml
default:
  image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/ubuntu:20.04

variables:
  USER: user
  SERVER_IP: "192.0.2.129"

.ssh_before_script:
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s) && echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

connect:
  stage: test
  extend: .ssh_before_script
  script:
    - ssh $USER@$SERVER_IP 'ls -la'

2. 解説

Dependency Proxyを使っていない場合は、imageの${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/を削除してください。
GitLab.comでも使えるはずです。

SSH接続の前処理を再利用しやすいようにYAMLアンカーを使ってステージの外に出しました(.ssh_before_script)。
SSHを利用するジョブでextendを使って追加します。

SSH鍵秘密鍵は、「GitLabのプロジェクト」>「設定」>「CI/CD」>「変数」でSSH_PRIVATE_KEY変数に入れてください。
ssh-agentがインストールされていない場合は、aptでインストールします。
SSH Fingerprintのチェック回避の為にStrictHostKeyChecking no~/.ssh/configに書きました。ssh-keyscanが不要になります。

3. まとめ

.gitlab-ci.yamlでextendを使ったことがありませんでしたが、やってみるとすっきり書けて良さそうです。
活用していきたいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?