Автоматическое развертывание Gitlab четыре: используйте Gitlab-runner для развертывания проектов Gitlab

GitLab

предисловие

Начальник фронтенда компании по каким-то причинам уволился и уехал в спешке. Последние два дня я учился и строил, записывая весь процесс сборки.

Это серия статей, от сборки Gitlab до установки, регистрации Gitlab-runner и их объединения для развертывания простого проекта.Из этих статей вы узнаете, как автоматически упаковывать и развертывать собственные проекты в Gitlab.

В серию входят четыре статьи, в том числе:

  1. Как установить Gitlab на облаке Alibaba
  2. Установите GITLAB-RUNNER
  3. Вход в систему LINUX без пароля
  4. Разверните проект GITLAB с помощью GITLAB-RUNNER

Так как я работаю на фронтенде, я не владею Linux, если есть какие-то ошибки, пожалуйста, укажите.

Оригинальный адрес:Развертывание проектов Gitlab с помощью Gitlab-runner

Это последняя статья из серии, в которой мы будем использовать Gitlab-runner для деплоя проектов на Gitlab.


Шаг 1 Вход с Linux на Linux без пароля

существуетэтоВ статье реализован вход без пароля из Windows в Linux, а Linux похож на Linux.

обращать внимание! ! ! !

我们在搭建 gitlab-runner 时创建了一个叫 ‘gitlab-runner’ 的用户,gitlab-runner 所有的操作都是在 ‘gitlab-runner’ 帐号下进行的Вы можете добавить в скрипт команду whoami для просмотра:

whoami
# 可以看到确实是 gitlab-runner 用户
gitlab-runner

所以免密登录也应该在 ‘gitlab-runner’ 帐号下配置,如果是用了 ‘root’ 帐号配的免密登录,gitlab-runner 跑到免密登录时则会看到报错:

Host key verification failed.
ERROR: Job failed: exit status 1

因为 ‘gitlab-runner’ 用户根本没有免密登录权限, поэтому не используйте учетную запись «root» для настройки без пароля, не используйте учетную запись «root» для настройки без пароля и не используйте учетную запись «root» для настройки без пароля!

Войдите в систему пользователя gitlab-runner

Помните, когда мы устанавливали gitlab-runner, была такая командная строка?

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

Именно здесь создается учетная запись gitlab-runner.

Если нет, то вам нужно заново создать, а затем изменить пароль注意:这里修改密码不会影响 gitlab-runner 使用该账户

passwd gitlab-runner

затем используйтеgitlab-runnerвойдите в аккаунт, чтобы продолжить


Предположим, мы используем机器AАвторизоваться机器B

Сначала сгенерируйте открытый и закрытый ключи на машине A.

ssh-keygen -t rsa

Затем нажмите Enter до конца, а затем вы можете ввести следующую команду для просмотра сгенерированного содержимого.

cd ~/.ssh
ls -a
.  ..  authorized_keys  id_rsa  id_rsa.pub  known_hosts

Введите следующую команду на машине А, чтобы отправить открытый ключ машины А на машину Б.

ssh-copy-id root@xx.xx.xxx.xx # 机器B的公网IP

Затем нажмите подсказку, чтобы ввести да или нажмите Enter, Наконец, вам нужно ввести пароль машины B. В случае успеха вы увидите

Number of key(s) added: 1

Попытка войти на машину B

ssh root@xx.xx.xxx.xx
Welcome to Alibaba Cloud Elastic Compute Service !

Шаг 2 Создайте проект локально

Здесь проект создается напрямую с помощью Vue-cli.

vue create gitlab-vue

запустить его локально

gitlab-vue

Также создайте проект в Gitlab и отправьте локальный проект в проект Gitlab.

cd existing_folder
git init
git remote add origin git@xx.xx.xxx.xx:root/gitlab-vue.git
git add .
git commit -m "Initial commit"
git push -u origin master

gitlab-vue

Шаг 3. Напишите файл .gitlab-ci.yml.

Создайте файл .gitlab-ci.yml в корневом каталоге проекта. Основной процесс выглядит следующим образом

  1. Установите зависимости сборки.
  2. Упакуйте новый файл.
  3. Войдите на сервер развертывания проекта, удалите старую версию файла проекта и, наконец, скопируйте упакованный файл.

Обратите внимание, что первые два шага выполняются на Gitlab-runner.

Согласно процессу, мы сначала определяем следующие основные шаги и отправляем, а затем видим, что в Pipelines все нормально.

stages:
  - install_deps
  - build_prod
  - deploy_prod

cache:
  key: ${CI_BUILD_REF_NAME}
  paths:
    - node_modules/
    - dist

# 安装构建依赖
install_deps_job:
  stage: install_deps
  only:
    - master
  script:
    - echo '安装构建依赖阶段'
  tags:
    - my-tag

# 打包新文件
build_prod_job:
  stage: build_prod
  only:
    - master
  script:
    - echo '打包新文件阶段'
  tags:
    - my-tag

# 登录项目部署服务器,移除旧版本项目文件,最后将打包好的文件拷贝过去
deploy_prod_job:
  stage: deploy_prod
  only:
    - master
  script:
    - echo '登录项目部署服务器,移除旧版本项目文件,最后将打包好的文件拷贝过去'
  tags:
    - my-tag

Далее шаг за шагом

1. Установите зависимости сборки

Этот шаг относительно прост, просто установите зависимости напрямую.

注意:要先在服务器上安装 nodeJs,否则会报错 npm: command not found

Способ установки смотрите здесь:Установка узла и настройка окружения под linux

# 安装构建依赖
install_deps_job:
  stage: install_deps
  # 这一步在多个分支上都会执行,一般会将所有环境的分支名都写上去
  only:
    - dev
    - master
  script:
    - echo '安装构建依赖阶段'
    - pwd # 我们查看一下现在的目录位置: /home/gitlab-runner/builds/6_sebBuN/0/root/gitlab-vue
    - npm i # 安装依赖
  tags:
    - my-tag

давайте представим На сервере Gitlab-runner мы вводим следующую команду для проверки

cd /home/gitlab-runner/builds/6_sebBuN/0/root/gitlab-vue
ls -a

# 这里看到 node_modules 文件夹,说明已成功安装依赖
.                .editorconfig  .gitlab-ci.yml     public
..               .eslintrc.js   node_modules       README.md
babel.config.js  .git           package.json       src
.browserslistrc  .gitignore     postcss.config.js  yarn.lock

2. Упакуйте новый файл

Команда пакета Vue-cli3 упакует проект в папку dist.

На этом этапе мы сначала удаляем старую версию папки dist, а затем перепаковываем

# 打包新文件
build_prod_job:
  stage: build_prod
  only:
    - master
  script:
    - echo '打包新文件阶段'
    - pwd # 查看当前目录
    - ls -a # 查看所有文件
    - rm -rf ./dist # 删除当前文件夹下的 dist 文件夹
    - npm run build # 打包
    - ls -a # 打包完成,再次查看所有文件
  tags:
    - my-tag

Отправьте код, вы можете увидеть папку dist в каталоге в Pipeline

$ ls -a
.
..
babel.config.js
.browserslistrc
dist # 这里多出了 dist 文件夹
.editorconfig
.eslintrc.js
.git
.gitignore
.gitlab-ci.yml
node_modules
package.json
postcss.config.js
public
README.md
src
yarn.lock

3. Войдите на сервер развертывания проекта, удалите старую версию файла проекта и, наконец, скопируйте упакованный файл в прошлое.

Мы создаем новую папку www в корне сервера проекта, чтобы поместить файлы упаковки нашего проекта.

# 登录项目部署服务器,移除旧版本项目文件,最后将打包好的文件拷贝过去
deploy_prod_job:
  stage: deploy_prod
  only:
    - master
  script:
    - echo '登录项目部署服务器,移除旧版本项目文件,最后将打包好的文件拷贝过去'
    - cd dist # 进入dist
    - pwd
    - whoami # gitlab-runner
     # 登录目标服务器
    - ssh root@39.98.177.19
    # 列出所有文件
    - ssh root@39.98.177.19 "ls -a"
    # 删 www 文件夹下所有内容
    - ssh root@39.98.177.19 "rm -rf ./www/*"
    # 使用 scp 命令远程拷贝文件
    - scp -r -P 22 ./* root@39.98.177.19:/root/www
  tags:
    - my-tag

сюда сшroot@39.98.177.19может сообщить об ошибкеPseudo-terminal will not be allocated because stdin is not a terminal.Буквально псевдотерминал нельзя будет назначать, потому что стандартный ввод не является терминалом. Добавьте аргументы -t -t для принудительного выделения псевдотерминала, даже если стандартный ввод не является терминалом,这里不用理会!.

ssh -t -t root@xx.xx.xxx.xx

Шаг 4. Установите Nginx на сервер проекта.

Добавьте порт 8889 в правило группы безопасности Alibaba Cloud.

Это было сделано раньше, поэтому я не буду повторяться здесь.

Установить зависимости

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

Загрузите Nginx и разархивируйте его.

cd /usr/local
mkdir nginx
cd nginx
# 下载tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
# 解压
tar -xvf nginx-1.13.7.tar.gz

Установите Nginx

cd /usr/local/nginx/nginx-1.13.7 
# 执行
./configure
# 执行make命令
make
# 执行make install
make install

Изменить файл конфигурации Nginx

vi /usr/local/nginx/conf/nginx.conf

Внесите следующие изменения

# user  nobody;
# ... 省略
http{
    server {
        listen       8889;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /root/www;
            index  index.html index.htm;
        }

    }
    # ... 省略
}

Перезапустите Nginx

cd /usr/local/nginx/sbin
./nginx -s reload

IP доступа + порт, я нашел здесь返回了403

Вернитесь к файлу конфигурации Nginx,将user nobody 的注释打开,并修改为 user root;

user  root;
# ... 省略
http{
    server {
        listen       8889;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /root/www;
            index  index.html index.htm;
        }

    }
    # ... 省略
}

Перезагрузите, наконец, можете нормально получить доступ

end

Модифицируем код, отправляем, ждем завершения сборки, обновляем страницу, и вы видите, что модификация успешно добавлена

end2

Ссылаться на:

Как установить Node.js на CentOS Решить проблему с nginx 403 запрещено

Категории