предисловие
Начальник фронтенда компании по каким-то причинам уволился и уехал в спешке. Последние два дня я учился и строил, записывая весь процесс сборки.
Это серия статей, от сборки Gitlab до установки, регистрации Gitlab-runner и их объединения для развертывания простого проекта.Из этих статей вы узнаете, как автоматически упаковывать и развертывать собственные проекты в Gitlab.
В серию входят четыре статьи, в том числе:
- Как установить Gitlab на облаке Alibaba
- Установите GITLAB-RUNNER
- Вход в систему LINUX без пароля
- Разверните проект 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 и отправьте локальный проект в проект 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
Шаг 3. Напишите файл .gitlab-ci.yml.
Создайте файл .gitlab-ci.yml в корневом каталоге проекта. Основной процесс выглядит следующим образом
- Установите зависимости сборки.
- Упакуйте новый файл.
- Войдите на сервер развертывания проекта, удалите старую версию файла проекта и, наконец, скопируйте упакованный файл.
Обратите внимание, что первые два шага выполняются на 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;
}
}
# ... 省略
}
Перезагрузите, наконец, можете нормально получить доступ
Модифицируем код, отправляем, ждем завершения сборки, обновляем страницу, и вы видите, что модификация успешно добавлена
Ссылаться на:
Как установить Node.js на CentOS Решить проблему с nginx 403 запрещено