В этом руководстве в основном объясняется, как развертывать интерфейсные проекты с помощью Jenkins и Github Actions.
- Первая часть — это использование Gitea для настройки сервера git в локальной сети, а затем использование Jenkins для развертывания проекта под Gitea на сервере в локальной сети.
- Вторая часть — развернуть проект Github на Github Page и Alibaba Cloud с помощью Github Actions.
Для чтения этого руководства не требуется, чтобы вы заранее знали Jenkins и Github Actions, если вы следуете рекомендациям этого руководства, вы можете автоматизировать развертывание проектов.
PS: Операционная система компьютера, которым я пользуюсь, - windows, то есть все последующие операции выполняются под windows. Конфигурация других операционных систем аналогична, и особой разницы не будет.
Gitea + Jenkins автоматически создает интерфейсные проекты и развертывает их на сервере.
Gitea используется для создания сервера Git LAN, а Jenkins — это инструмент CI/CD для развертывания интерфейсных проектов.
Настроить Gitea
- скачатьGitea, выберите предпочитаемую версию, например 1.13, выберите
gitea-1.13-windows-4.0-amd64.exe
скачать. - После загрузки создайте новый каталог (например, gitea), поместите загруженное программное обеспечение Gitea в этот каталог и дважды щелкните для запуска.
- Открыть
localhost:3000
Вы можете видеть, что Gitea уже работает на вашем компьютере. - Нажмите «Регистрация», в первый раз появится страница начальной конфигурации, выбор базы данных.
SQLite3
. В дополнение положитьlocalhost
Измените его на LAN-адрес вашего компьютера, например, IP-адрес моего компьютера192.168.0.118
.
- После заполнения информации нажмите «Установить сейчас» и подождите некоторое время, чтобы завершить настройку.
- Продолжайте нажимать «Зарегистрировать пользователя», первый зарегистрированный пользователь станет администратором.
- Откройте каталог установки Gitea и найдите
custom\conf\app.ini
, добавьте строку кода внутриSTART_SSH_SERVER = true
. На этом этапе вы можете использовать ssh для выполнения операции push.
8. Если вы не можете клонировать проект с помощью http, отмените прокси-сервер git.
git config --global --unset http.proxy
git config --global --unset https.proxy
Настройка Дженкинса
- Необходимо заранее установить JDK, существует множество руководств по установке JDK, пожалуйста, найдите их самостоятельно.
- ОткрытьJenkinsСтраница загрузки.
- столкнулся при установке
Logon Type
, выберите первый.
- Порт по умолчанию 8080, здесь я заполняю 8000. Он откроется автоматически после установки
http://localhost:8000
Веб-сайт должен подождать некоторое время для инициализации. - Следуйте инструкциям, чтобы найти соответствующий файл (путь прямой копии открывается на моем компьютере), где является пароль администратора.
6. Для установки плагина выберите первый.
- Создайте пользователя с правами администратора, нажмите «Готово» и «Сохранить» и перейдите к следующему шагу.
8. После завершения настройки автоматически откроется домашняя страница, затем нажмитеManage Jenkins
-> Manage plugins
Установите плагин.
9. Нажмите可选插件
, введите nodejs, найдите плагины и установите.
10. После завершения установки вернитесь на домашнюю страницу и нажмитеManage Jenkins
-> Global Tool Configuration
Настройте ноды. Если ваш компьютер Win7, версия nodejs не должна быть слишком высокой, просто выберите версию v12.
Создать статический сервер
- Создайте пустой каталог и выполните его в нем
npm init -y
, чтобы инициализировать проект. - воплощать в жизнь
npm i express
Скачать экспресс. - затем создайте
server.js
файл, код такой:
const express = require('express')
const app = express()
const port = 8080
app.use(express.static('dist'))
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
Он помещает текущий каталогdist
Папка устанавливается в каталог ресурсов статического сервера, а затем выполняетсяnode server.js
Запустите сервер.
Поскольку нетdist
папка, поэтому посещение сайта — это пустая страница.
Но не волнуйтесь, вы увидите содержание через некоторое время.
Автоматическая сборка + развертывание на сервере
- Загрузите демонстрационный проект, предоставленный Jenkins.building-a-multibranch-pipeline-project, затем создайте новый репозиторий в Gitea, клонируйте в него контент и отправьте его на сервер Gitea.
2. Откройте домашнюю страницу Jenkins и нажмите新建 Item
Создайте проект.3. Выберите源码管理
, введите адрес репозитория на вашем Gitea.
- Вы также можете попробовать сборку по времени, приведенный ниже код означает сборку каждые 5 минут.
- Выберите среду сборки, здесь выберите только что настроенные узлы.
6. Нажмите Добавить шаги сборки, окна для выбораexecute windows batch command
, линукс на выборexecute shell
.
- войти
npm i && npm run build && xcopy .\build\* G:\node-server\dist\ /s/e/y
Роль этой команды заключается в установке зависимостей, сборке проектов и копировании статического ресурса сборки в указанный каталог.G:\node-server\dist\
. Этот каталог - это статический каталог ресурсов сервера.
8. После сохранения вернитесь на домашнюю страницу. Щелкните маленький треугольник рядом с элементом и выберитеbuild now
.9. Начните сборку проекта, мы можем нажать на проект, чтобы просмотреть процесс сборки.
10. Сборка удачная, открытаяhttp://localhost:8080/
Взгляните на результаты.
11. Так как мы просто ставим билд каждые 5 минут, то можем менять содержимое сайта, потом ничего не делать, подождать какое-то время и снова открыть сайт.12. Отправьте изменения на сервер Gitea и немного подождите. Откройте веб-сайт и обнаружите, что содержимое изменилось.
Соберите проект с пайплайном
Строительные проекты с использованием трубопроводов можно комбинировать с Gitea.webhook
хук для выполненияgit push
когда проект создается автоматически.
- Нажмите на свое имя пользователя в правом верхнем углу главной страницы, выберите
设置
.
- Добавьте токен, не забудьте сохранить токен.
- Откройте домашнюю страницу Jenkins и нажмите
新建 Item
Создайте проект.
4. Нажмите构建触发器
,выберите触发远程构建
, введите токен, который вы только что создали.5. Выберите трубопровод, следуйте инструкциям, чтобы ввести содержимое, затем нажмите保存
.
6. Откройте каталог установки Jenkins.jenkins.xml
файл, нашел<arguments>
метка, добавить-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
. то, что он делает, близкоCSRF
Валидация, если не выключена, Giteawebhook
Он будет продолжать сообщать об ошибках 403 и не может быть использован. После добавления параметров введите командную строку в директориюjenkins.exe restart
Перезапустите Дженкинса.
7. Вернитесь на домашнюю страницу, настройте глобальные параметры безопасности. галочка匿名用户具有可读权限
, а затем сохраните.
- Откройте страницу репозитория Gitea и выберите
仓库设置
.
- нажмите
管理 web 钩子
Добавить веб-хуки, параметры хукаGitea
. - Целевой URL-адрес вводится по запросу Дженкинса. затем нажмите
添加 web 钩子
.
11. Нажмите на созданный веб-хук, перетащите его вниз и нажмите «Проверить отправку». Неудивительно, что вы должны увидеть сообщение о том, что отправка прошла успешно.В это время, когда вы вернетесь на домашнюю страницу Jenkins, вы обнаружите, что проект уже создается.12. Так как нет конфигурацииJenkinsfile
файл, сборка в этот раз не удастся. Итак, следующий шаг — настройкаJenkinsfile
документ. Скопируйте следующий код в свой проект Gitea в разделеJenkinsfile
документ. Jenkins автоматически прочитает содержимое файла для выполнения операций сборки и развертывания при сборке.
pipeline {
agent any
stages {
stage('Build') {
steps { // window 使用 bat, linux 使用 sh
bat 'npm i'
bat 'npm run build'
}
}
stage('Deploy') {
steps {
bat 'xcopy .\\build\\* D:\\node-server\\dist\\ /s/e/y' // 这里需要改成你的静态服务器资源目录
}
}
}
}
- Всякий раз, когда ваш проект Gitea выполняется
push
При эксплуатации Gitea пройдетwebhook
Отправьте почтовый запрос в Jenkins для выполнения операций сборки и развертывания.
резюме
Если вашей операционной системой является Linux, вы можете использовать ssh для удаленного входа в Alibaba Cloud после упаковки Jenkins и скопировать упакованные файлы на статический сервер в Alibaba Cloud, чтобы можно было автоматически развернуть Alibaba Cloud. Подробнее о том, как удаленно войти в Alibaba Cloud, см. в разделе «Развертывание Github Actions в Alibaba Cloud» ниже.
Действия GitHub автоматически строят и развертывают проект на передний сервер
Если ваш проект является проектом Github, то использование Github Actions может быть лучшим выбором.
Развернуть на странице Github
Давайте посмотрим, как выполнить развертывание на Github Pages с помощью Github Actions.
Под проект нужно развернуть на Github Page, создать yml файл и положить его в.github/workflow
Под содержанием. ты можешь назвать этоci.yml
, что похоже на ДженкинсаJenkinsfile
файл, содержащий код скрипта, который будет выполняться автоматически.
Содержимое этого файла yml выглядит следующим образом:
name: Build and Deploy
on: # 监听 master 分支上的 push 事件
push:
branches:
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest # 构建环境使用 ubuntu
steps:
- name: Checkout
uses: actions/checkout@v2.3.1
with:
persist-credentials: false
- name: Install and Build # 下载依赖 打包项目
run: |
npm install
npm run build
- name: Deploy # 将打包内容发布到 github page
uses: JamesIves/github-pages-deploy-action@3.5.9 # 使用别人写好的 actions
with: # 自定义环境变量
ACCESS_TOKEN: ${{ secrets.VUE_ADMIN_TEMPLATE }} # VUE_ADMIN_TEMPLATE 是我的 secret 名称,需要替换成你的
BRANCH: master
FOLDER: dist
REPOSITORY_NAME: woai3c/woai3c.github.io # 这是我的 github page 仓库
TARGET_FOLDER: github-actions-demo # 打包的文件将放到静态服务器 github-actions-demo 目录下
EстьACCESS_TOKEN
Переменные должны быть настроены сами по себе.
- Откройте сайт Github, нажмите на свою аватарку в правом верхнем углу, выберите
settings
.
- Нажмите в левом нижнем углу
developer settings
.
- На левой боковой панели нажмите
Personal access tokens(个人访问令牌)
.
- нажмите
Generate new token(生成新令牌)
.
- Введите имя и отметьте
repo
.
- Прокрутите вниз и нажмите
Generate token
и сохраните сгенерированный токен.
- Откройте свой проект Github и нажмите
settings
.
нажмитеsecrets
->new secret
.
Создайте ключ, небрежно введите имя (разделенное символом подчеркивания) и введите токен, который вы только что создали.
в приведенном выше кодеACCESS_TOKEN: ${{ secrets.VUE_ADMIN_TEMPLATE }}
Замените его именем секрета, который вы только что создали.Замененный код выглядит следующим образомACCESS_TOKEN: ${{ secrets.TEST_A_B }}
. После сохранения сделайте коммит на Github.
В будущем ваш проект должен выполняться толькоgit push
, Github Actions автоматически создаст проект и опубликует его на вашей странице Github.
Чтобы узнать подробности выполнения Github Actions, нажмите на репозиторийActions
вариант просмотра.
Для получения дополнительной информации, пожалуйста, обратитесь к моему демонстрационному проектуgithub-actions-demo.
После успешной сборки откройте веб-сайт Github Page, и вы обнаружите, что контент был успешно опубликован.
Разверните действия Github в облаке Alibaba
Инициализировать облачный сервер Alibaba
- Купить сервер Alibaba Cloud, выбрать операционную систему, я выбираю ubuntu
- В консоли управления облачным сервером выберите Экземпляр->Дополнительно->Ключ->Сбросить пароль экземпляра (для входа в систему позже)
- Выберите «Удаленное подключение» -> «VNC», появится всплывающий пароль, запомните его и используйте для удаленных подключений в будущем (ctrl + alt + f1~f6 переключайте терминалы, например, ctrl + alt + f1 — это первый терминал)
- После ввода идет ввод командной строки
root
(имя пользователя по умолчанию), пароль — это пароль экземпляра, который вы только что сбросили - Войти успешно, обновить источник установки
sudo apt-get update && sudo apt-get upgrade -y
- установить нпм
sudo apt-get install npm
- Установите пакет управления npm
sudo npm install -g n
- Установите последнюю стабильную версию узла
sudo n stable
Создать статический сервер
mkdir node-server // 创建 node-server 文件夹
cd node-server // 进入 node-server 文件夹
npm init -y // 初始化项目
npm i express
touch server.js // 创建 server.js 文件
vim server.js // 编辑 server.js 文件
Введите следующий код (используйте vim для ввода файла и нажмите i для редактирования, нажмите esc при сохранении, затем введите :wq, затем нажмите Enter), пожалуйста, найдите другие способы использования.
const express = require('express')
const app = express()
const port = 3388 // 填入自己的阿里云映射端口,在网络安全组配置。
app.use(express.static('dist'))
app.listen(port, '0.0.0.0', () => {
console.log(`listening`)
})
воплощать в жизньnode server.js
Начать мониторинг, потому что нетdist
каталог, не беспокойтесь.
Обратите внимание, что IP-адрес прослушивания должен быть0.0.0.0
, пожалуйста, посмотриПримечания по развертыванию проектов Node.js.
Alibaba Yun входит в порт для просмотра и настройки в группе безопасности сети.
Создайте пару ключей Alibaba Cloud
Пожалуйста, обратитесь кСоздайте пару ключей SSHа такжеПривязать пару ключей SSHПривяжите свой экземпляр сервера ECS с ключом и сохраните закрытый ключ к компьютеру (например, в файле ECS.PEM).
Откройте проект Github, который вы хотите развернуть в облаке Alibaba, и нажмите settings->secrets.
Нажмите на новый секретсекретное имяSERVER_SSH_KEY
и введите ключ Alibaba Cloud прямо сейчас.
Нажмите добавить секрет, чтобы закончить.
построить под свой проект.github\workflows\ci.yml
Файл, заполните следующее:
name: Build app and deploy to aliyun
on:
#监听push操作
push:
branches:
# master分支,你也可以改成其他分支
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install Node.js
uses: actions/setup-node@v1
with:
node-version: '12.16.2'
- name: Install npm dependencies
run: npm install
- name: Run build task
run: npm run build
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.1.5
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: '-rltgoDzvO --delete'
SOURCE: dist # 这是要复制到阿里云静态服务器的文件夹名称
REMOTE_HOST: '118.190.217.8' # 你的阿里云公网地址
REMOTE_USER: root # 阿里云登录后默认为 root 用户,并且所在文件夹为 root
TARGET: /root/node-server # 打包后的 dist 文件夹将放在 /root/node-server
Сохраните и отправьте на Github.
В будущем, пока ваш проект выполняетсяgit push
операция, она будет выполнена автоматическиci.yml
Определенный сценарий поместит файл пакета на ваш статический сервер Alibaba Cloud.
Эти действия в основном делают две вещи:
- Клонируйте свой проект, скачивайте зависимости, package.
- Используйте свой закрытый ключ Alibaba Cloud для входа в Alibaba Cloud через SSH и загрузите упакованный файл (используя rsync) в папку, указанную Alibaba Cloud.
Если вы все еще не понимаете, пожалуйста, взгляните на мойdemo.
ci.yml
Описание файла конфигурации
-
name
, указывающее имя этого рабочего процесса. -
on
, указывая значение мониторинга, за которым следуют различные события, такие какpush
мероприятие.
Следующий код указывает, что вы хотите контролироватьmaster
разветвленныйpush
мероприятие. Когда Github Actions слушаетpush
Когда событие происходит, оно выполняет следующееjobs
Определенная последовательность операций.
name: Build app and deploy to aliyun
on:
#监听push操作
push:
branches:
# master分支,你也可以改成其他分支
- master
jobs:
...
-
jobs
, что буквально означает серию заданий, вы можетеjobs
Многие задания определены под полями, напримерjob1
,job2
д., и выполняются они параллельно.
jobs:
job1:
...
job2:
...
job3:
...
оглядыватьсяci.yml
файл, у него есть только одно задание, т.е.build
, название задания определяете сами, звонитеgood
Также может.
-
runs-on
, указывающий, в какой операционной системе вы хотите запустить этот рабочий процесс,ci.yml
Файл определяет последнюю стабильную версиюubuntu
. Помимо Ubuntu, он также может выбрать MAC или Windows.
-
steps
, буквально означает серию шагов, что означает, что задание выполняется в несколько шагов. Например, выполнитьstep1
, а затем выполнитьstep2
...
setps
Пошаговое объяснение
setps
На самом деле это массив, и в синтаксисе YAML он начинается с-
Он начинается с элемента массива. Например['a', 'b', 'c']
Выраженный синтаксис YAML:
- a
- b
- c
такsetps
Это массив шагов, выполняемых сверху вниз. отci.yml
Из документации каждый маленький шаг имеет несколько связанных с ним опций:
-
name
, имя маленького шага. -
uses
, имя или путь к библиотеке действий, используемой небольшими шагами, Github Actions позволяет вам использовать библиотеку действий, написанную другими. -
run
, небольшие шаги, которые необходимо выполнитьshell
Заказ. -
env
, чтобы установить переменные среды, связанные с небольшими шагами. -
with
, предоставляя параметры.
В итоге,ci.yml
в файлеsetps
Это легко понять, давайте объясним это от начала до конца:
steps:
- uses: actions/checkout@v1
- name: Install Node.js
uses: actions/setup-node@v1
with:
node-version: '12.16.2'
- name: Install npm dependencies
run: npm install
- name: Run build task
run: npm run build
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.1.5
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: '-rltgoDzvO --delete'
SOURCE: dist # 这是要复制到阿里云静态服务器的文件夹名称
REMOTE_HOST: '118.190.217.8' # 你的阿里云公网地址
REMOTE_USER: root # 阿里云登录后默认为 root 用户,并且所在文件夹为 root
TARGET: /root/node-server # 打包后的 dist 文件夹将放在 /root/node-server
- использовать
actions/checkout@v1
код клонирования библиотеки вubuntu
начальство. - использовать
actions/setup-node@v1
установка библиотеки nodejs,with
предоставил параметрnode-version
Указывает версию nodejs для установки. - существует
ubuntu
изshell
выполнить наnpm install
Скачать зависимость. - воплощать в жизнь
npm run build
Упакуйте проект. - использовать
easingthemes/ssh-deploy@v2.1.5
библиотека, функция этой библиотеки заключается в использованииSSH
Удаленно войдите на сервер Alibaba Cloud, используя метод удаленного входа, и скопируйте упакованную папку в каталог, указанный Alibaba Cloud.
отenv
Как видно, эта библиотека ActionS требует от нас предоставления нескольких переменных среды:
-
SSH_PRIVATE_KEY
: Alibaba Cloud Key Пара закрытых ключей (вам нужно написать перед Github Secrets), -
ARGS: '-rltgoDzvO --delete'
, невнимательно изучил, видимо удалили после копирования файла. -
SOURCE
: имя упакованной папки -
REMOTE_HOST
: IP-адрес общедоступной сети Alibaba Cloud. -
REMOTE_USER
: Имя пользователя облачного сервера Alibaba. -
TARGET
: имя каталога, который вы хотите скопировать в указанный каталог облачного сервера Alibaba.
Если вы хотите узнать реализацию других библиотек действий, вы можете напрямую скопировать имя библиотеки действий для поиска в поисковой системе, например, поискactions/checkout
Результат:
Я видел это, ставь лайк и уходи.
использованная литература
- Руководство пользователя Дженкинс
- Документация по действиям GitHub
- Документация по страницам GitHub
- Документация Gitea
- Синтаксис рабочего процесса для действий GitHub