Я фронтенд-разработчик, работающий над улучшением процесса развертывания, при котором у нашего основного веб-приложения есть родительский элемент, который импортирует все приложения с функциями как NPM модулей / зависимостей. Это не моя рубка, но я рад узнать об этом больше. Наш конвейер Jenkins создается с помощью Groovy файла:
def npmJob = job("$SRC_JOB") {
logRotator {
numToKeep(-1)
artifactNumToKeep(-1)
}
wrappers {
sshAgent('gitlab-jenkins-creds')
credentialsBinding {
usernamePassword('username-here', 'password-here', 'artifactory-docker-goes-here')
}
}
scm {
git {
remote {
url("$REPO")
credentials('gitlab-jenkins-creds')
}
extensions {
wipeOutWorkspace()
}
branch('master')
}
}
steps {
shell(NPM_SHELL_STEPS)
}
}
В настоящее время развертывание выполняется вручную инженерами Front End:
Пакет приложения Parent / Wrapper. json:
"@myorg/feature-app-1": "1.1.1",
"@myorg/feature-app-2": "2.1.22",
"@myorg/feature-app-3": "0.12.11",
"@myorg/feature-app-4": "1.1.5",
- Feature App построено в Jenkins> Модуль NPM создан и хранится в Artifactory.
- Родительское приложение / Wrapper
package.json
обновляется вручную, чтобы отразить новую версию зависимости и помещается / объединено с мастером. - Приложение Parent / Wrapper построено в Jenkins с новыми версиями и развернуто на S3.
Я бы хотел удалить ручные шаги и запускать сборки автоматически.
Сначала обновите пакет. json в Parent / Wrapper, чтобы включить префикс ^
, чтобы полная сборка вытягивала более новую версию:
"@myorg/feature-app-1": "^1.1.1",
"@myorg/feature-app-2": "^2.1.22",
"@myorg/feature-app-3": "^0.12.11",
"@myorg/feature-app-4": "^1.1.5",
Затем в Feature / Parent, включите опцию [ ] Trigger builds remotely (e.g., from scripts)
.
Затем в Jenkins Feature обновите dsl.groovy
, чтобы включить функцию как часть steps
, которая запускается в качестве последнего шага. :
...see above...
steps {
shell(NPM_SHELL_STEPS)
$curl JENKINS_URL/job/parent_app/build?token={TOKEN_NAME}
}
Это похоже на это сработает?
Я думаю, что в идеале, когда приложение Feature завершит свою сборку, можно открыть новый запрос на слияние в GitLab, а затем, когда он будет объединен, процесс будет запущен в родительском конвейере, однако это кажется невозможным в GitLab, так как это будет происходить в разных репозиториях / проектах, поскольку они не являются ветвями друг друга.