У меня проблема с конвейером Дженкинса в проекте загрузки Maven Spring с использованием профилей Spring.
Это pom.xml:
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<profile>
<id>svil</id>
<properties>
<spring.profiles.active>svil</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
application.properties:
#---
[email protected]@
my.prop=used-always-in-all-profiles
#---
spring.config.activate.on-profile=dev
spring.datasource.url=.....
spring.datasource.username=....
spring.datasource.password=....
#---
spring.config.activate.on-profile=svil
spring.datasource.url=.....
spring.datasource.username=....
spring.datasource.password=....
#---
spring.config.activate.on-profile=production
spring.datasource.url=....
spring.datasource.username=....
spring.datasource.password=....
Дженкинсфайл:
pipeline {
agent any
tools {
maven 'jenkins-maven'
jdk 'java-17'
}
stages {
stage('Build'){
steps {
sh "mvn -Psvil clean install -DskipTests"
}
}
stage('Test'){
steps{
sh "mvn test"
}
}
stage('Deploy') {
steps {
.....
}
}
}}
Дженкинс настроен с использованием моего репозитория GitHub и выполняет шаги, определенные в файле Jenkinsfile. Используется maven, установленный на сервере:
/opt/apache-maven-3.6.3
При запуске команды:
sh "mvn -Psvil clean install -DskipTests"
Указанный профиль (svil) загружается некорректно, а принимает профиль по умолчанию (dev)
2024-04-17T14:25:04.167+02:00 INFO 825213 --- [ main] i.r.p.ApplicationTests : Starting ApplicationTests using Java 17.0.10
with PID 825213 (started by jenkins in /var/lib/jenkins/workspace/app)
2024-04-17T14:25:04.168+02:00 INFO 825213 --- [ main] i.r.p.ApplicationTests : The following 1 profile is active: "dev"
Из командной строки у меня не возникло никаких проблем, и проект без проблем скомпилировался в jar.
Как я могу настроить конвейер Дженкинса для использования правильных профилей Spring?
Спасибо




Решение состоит в том, чтобы изменить файл Jenkins, добавить среду с профилем и использовать их в mvn clean installan во время сборки:
environment {
SPRING_PROFILES_ACTIVE = 'svil'
}
stages {
stage('Build'){
steps {
sh "mvn clean install -Dspring.profiles.active=${SPRING_PROFILES_ACTIVE} -DskipTests"
}
}
Профили Maven не являются профилями Spring, и вам не следует предоставлять разные двоичные файлы для разных сред. Вместо этого создайте один артефакт и укажите профиль только при запуске приложения.