Gitlab-ci и deploy.sh - PullRequest
       17

Gitlab-ci и deploy.sh

0 голосов
/ 28 августа 2018

Я пытаюсь использовать систему непрерывной интеграции, которую предлагает Gitlab CI, для наращивания навыков и автоматического развертывания моего репо после git push my local.

Но вот уже несколько недель я не могу найти решения, которые решил использовать.

Файлы:

  1. . /. Gitlab-ci.yml
  2. . / Deploy.sh

gitlab-ci.yml

image: ubuntu:latest

before_script:
  - apt-get install -y
  - apt-get update -y

stages:
  - deploy

deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging server"
    - expect ./deploy.sh
  environment:
    name: staging
    url: my.site.com
  only:
  - master

deploy.sh

#!/usr/bin/expect -f

spawn ssh username@host "cd www && git pull https://Username:myPassword@gitlab.com/My/privaterepo.git"

expect "password:"
send "myPassword\n";

interact

Моя проблема в том, что у меня часто возникает ошибка, подобная этой:

- expect ./deploy.sh
/bin/bash: line 79: expect: command not found

У меня были другие ошибки при вводе файла sh из gitlab-ci.yml:

- sh ./deploy.sh ( or bash ./deploy.sh )
./deploy.sh: 6: ./deploy.sh: spawn: not found
./deploy.sh: 8: ./deploy.sh: expect: not found
./deploy.sh: 9: ./deploy.sh: send: not found
./deploy.sh: 11: ./deploy.sh: interact: not found

и когда в моем терминале моего компьютера я запускаю ожидаемую ./deploy.sh, развертывание работает правильно.

Я также пытался установить в before_script ожидаемый результат:

- apt-get update expect -y

Но у меня возник вопрос по одной посылке "Цдата", чтобы выбрать мою страну. но я не могу вмешиваться в сценарий.

Моя цель состоит в том, чтобы каждый git push моего локального компьютера, gitlab, запускал git pull и обновлял код на моем сайте preprod и prod затем (который я собираюсь затем заблокировать с помощью «when: manual» в другое задание).

У вас есть решение, которое поможет мне решить эту проблему, потому что я думаю, что это не займет много вещей, которые я не понимаю?

Спасибо!

1 Ответ

0 голосов
/ 30 августа 2018

Вот мой файл, который работает, я не помещал ключ на свой удаленный сервер без пароля и файл authorized_keys на моем сервере. Не забудьте положить его в gitlab.

Теперь это работает.

variables:
  USERNAME: "$USERNAME_GITLAB" # username
  PASSWORD: "$PASSWORD_GITLAB" # password
  SSH-USER: "$SSH-USER_GITLAB" # ssh-username
  SSH-HOST: "$SSH-HOST_GITLAB" # ssh-host
  SSH_PRIVATE_KEY: "$SSH_PRIVATE_KEY" # private key without password
  REPO: $REPO # gitlab.com/me/repo.git
  COMMANDS: > # commands in your server preprod
    cd www && 
    git pull

before_script:
  ##
  ## 1 Create an ssh key on the preprod server or prod without a password
  ## 2 Copy a pub key for ./ssh/authorized_keys
  ## 3 Copy the same pub key for gitlab ssh key of the profile
  ## 4 Copy the private key for gitlab> repo> params> ci / cd> env variables> $ SSH_PRIVATE_KEY
  ## 5 Try to improve the script
  ##
  ##
  ## Install ssh-agent if not already installed, it is required by Docker.
  ## (change apt-get to yum if you use an RPM-based image)
  ##
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y && apt-get install git -y )'

  ##
  ## Run ssh-agent (inside the build environment)
  ##
  - eval $(ssh-agent -s)

  ##
  ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
  ## We're using tr to fix line endings which makes ed25519 keys work
  ## without extra base64 encoding.
  ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
  ## Private key from the server without password
  ##
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null ## /dev/null = trou noir

  ##
  ## Create the SSH directory and give it the right permissions
  ##
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh

  - ssh-keyscan charrier.alwaysdata.net >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts

  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

  ##
  ## Optionally, if you will be using any Git commands, set the user name and
  ## and email.
  ##
  - git config --global user.email "username@mail.com"
  - git config --global user.name "$USERNAME"

deploy:
  #when: manual 
  script:
    #- ssh -o StrictHostKeyChecking=no $SSH-USER@$SSH-HOST "cd www && git clone https://$USERNAME:$PASSWORD@$REPO"
    - ssh -o StrictHostKeyChecking=no $SSH-USER@$SSH-HOST "$COMMANDS"

  only:
    - master

Спасибо.

...