1、Jenkins系统配置
选择系统管理
选择系统配置
填写SSH remote hosts
注意,Credentials这里选择的,需要先在凭据那里添加全局凭据
填写新的全局凭据如下:
2、Jenkins上的工程部署配置
新建一个任务
任务类型配置为流水线
任务配置如下:
General这里的配置如图:
构建触发器这里选择第三项
注意,构建触发器这里选择的第三项后面的网址是需要在gitlab这边做配置,才能够从gitlab那边勾到代码自动部署。
同时,需要点击高级按钮,获取里面的Secret token。通过点击Generate按钮。如下图:
高级项目选项不用配置
流水线配置如下:
3、代码配置
需要在工程中配置一个Jenkinsfile-slwdev文件
示例如下:
node{
def mvnHome = tool ‘m3’
def dockerComposeHome = ‘/usr/local/bin’
env.PATH = “
e
n
v
.
P
A
T
H
:
{env.PATH}:
env.PATH:{mvnHome}/bin:${dockerComposeHome}”
def SPRING_PROFILES_ACTIVE = “slwdev”
def API_PORT=8098
def DPORT=18098
def remote=[:]
remote.name=‘[email protected]’
remote.host = ‘10.10.201.96’
remote.user = ‘root’
remote.password = ‘Sutpcslw1’
remote.allowAnyHosts = true
stage(‘Prepare’){
echo “1.Prepare”
checkout scm
pom = readMavenPom file: ‘code/carroad-api/pom.xml’
docker_host = “nexus.sutpc.cc:9091”
img_name = “
p
o
m
.
g
r
o
u
p
I
d
−
{pom.groupId}-
pom.groupId−{pom.artifactId}-
S
P
R
I
N
G
P
R
O
F
I
L
E
S
A
C
T
I
V
E
"
d
o
c
k
e
r
i
m
g
n
a
m
e
=
"
{SPRING_PROFILES_ACTIVE}" docker_img_name = "
SPRINGPROFILESACTIVE"dockerimgname="{docker_host}/${img_name}”
echo “group: ${pom.groupId}, artifactId: ${pom.artifactId}, version: ${pom.version}”
echo “docker-img-name: KaTeX parse error: Expected '}', got '&' at position 161: …ME != 'master' &̲& env.BRANCH_NA…{env.BRANCH_NAME}-${build_tag}”
}
}
}
stage(“Verify”){
echo “2.Verify”
sh “cd ./code/carroad-api”
//sh “mvn clean install -Dmaven.test.skip=true -f ./code/carroad-api/pom.xml”
sh “mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip=true -f ./code/carroad-api/pom.xml”
}
stage(“Build”){
echo “3.Build”
echo “docker_img_name:
d
o
c
k
e
r
i
m
g
n
a
m
e
,
b
u
i
l
d
t
a
g
:
{docker_img_name},build_tag:
dockerimgname,buildtag:{build_tag}”
sh “docker build -t
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag} -f ./code/carroad-api/Dockerfile ./code/carroad-api/”
}
stage(‘Push’) {
echo “4.Push”
echo ‘Pushing Docker Image…’
echo “docker tag
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag} ${docker_img_name}:latest”
echo “docker tag
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag}
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{pom.version}”
sh “docker tag
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag} ${docker_img_name}:latest”
sh “docker tag
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag}
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{pom.version}”
sh “docker login -u admin -p admin123 nexus.sutpc.cc:9091”
echo “docker push ${docker_img_name}:latest”
sh “docker push ${docker_img_name}:latest”
echo “docker push
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{pom.version}”
sh “docker push
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{pom.version}”
echo “docker push
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag}”
sh “docker push
d
o
c
k
e
r
i
m
g
n
a
m
e
:
{docker_img_name}:
dockerimgname:{build_tag}”
}
stage(‘Deploy’){
echo “5.Deploy”
echo “docker kill ${img_name}”
echo “docker rm ${img_name}”
echo “docker pull ${docker_img_name}:latest”
echo “docker run -d -p
A
P
I
P
O
R
T
:
8098
−
e
S
P
R
I
N
G
P
R
O
F
I
L
E
S
A
C
T
I
V
E
=
{API_PORT}:8098 -e SPRING_PROFILES_ACTIVE=
APIPORT:8098−eSPRINGPROFILESACTIVE={SPRING_PROFILES_ACTIVE} --name ${img_name} ${docker_img_name}:latest”
sshCommand remote :remote,command:“docker kill ${img_name}”,failOnError:false
sshCommand remote :remote,command:“docker rm ${img_name}”,failOnError:false
sshCommand remote :remote,command:“docker login -u admin -p admin123 nexus.sutpc.cc:9091”,failOnError:false
sshCommand remote :remote,command:“docker pull ${docker_img_name}:latest”,failOnError:false
sshCommand remote:remote,command:“docker run -d -p
A
P
I
P
O
R
T
:
8098
−
e
S
P
R
I
N
G
P
R
O
F
I
L
E
S
A
C
T
I
V
E
=
{API_PORT}:8098 -e SPRING_PROFILES_ACTIVE=
APIPORT:8098−eSPRINGPROFILESACTIVE={SPRING_PROFILES_ACTIVE} -e JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${DPORT} --name ${img_name} ${docker_img_name}:latest”
}
其中SPRING_PROFILES_ACTIVE是你的分支配置名称
同时,你需要有一个Dockerfile文件
示例如下:
FROM openjdk:8-jdk-alpine
RUN echo “Asia/Shanghai” > /etc/timezone
ADD target/carroad-api-1.0-SNAPSHOT.jar /app/carroad-api.jar
#CMD [“java”, “-jar”,"-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}", “/app/carroad-api.jar”, “–user.timezone=GMT+08”]
ENTRYPOINT [“sh”,"-c",“java
J
A
V
A
O
P
T
S
−
D
j
a
v
a
.
s
e
c
u
r
i
t
y
.
e
g
d
=
f
i
l
e
:
/
d
e
v
/
.
/
u
r
a
n
d
o
m
−
D
s
p
r
i
n
g
.
p
r
o
f
i
l
e
s
.
a
c
t
i
v
e
=
{JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=
JAVAOPTS−Djava.security.egd=file:/dev/./urandom−Dspring.profiles.active={SPRING_PROFILES_ACTIVE} -Xmx900m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -jar /app/carroad-api.jar”, “–user.timezone=GMT+08”]
EXPOSE 8098
注:
Jenkins在打包到docker镜像中时需要能够访问到docker仓库,所以需要在/etc/docker/文件夹下配置一个daemon.json文件。
daemon.json文件内容如下:
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”],
“insecure-registries”: [“nexus.sutpc.cc:9091”]
}
至此,整个流程结束。over。