目的及其效果
效果
基础目的
- 使用pipeline能够完成基本的多服务项目发送到指定服务器
- 能够并行执行基础服务
- 能够阶段性的有顺序的执行特定服务
- 脚本中避免出现隐私内容
- 能够实现业务脚本执行
jenkins设置
注意选择 `ssh username with private key` 类型,然后选择 `Enter directly` 在下面的输入框中输入登录服务器的`pem`文件内容。
- 同时拷贝pem文件在jenkins执行节点,使用远程命令手动执行一次(命令随意,
ls
都可以),防止jenkins自动执行出错。
##举例:
ssh -i pem文件 root@192.168.1.111 jps
pipeline脚本文件使用凭据登录远程服务器或者远程执行脚本文件
注意事项
- 为
pem
文件授权,如果不修改权限root用户会出现问题
sh "chmod 600 ${pem}"
sh "scp -i ${pem} ${WORKSPACE}/start.sh root@${remoteHost}:${remoteDir}"
sh "ssh -i ${pem} root@${remoteHost} \"chmod +x ${remoteDir}/start.sh appname \" "
DockerFile文件使用动态参数构建,避免每个模块都需要一个DockerFile
#基础镜像
FROM openjdk:8-jdk-alpine
#外部参数 区分不同服务
ARG APPNAME
#挂载容器的位置, 容易找到
VOLUME /wjl/docker
#添加打包jar包/war包
ADD $APPNAME.jar /APP.jar
RUN echo $APPNAME.jar
#运行命令
ENTRYPOINT ["java","-jar","/APP.jar","--spring.profiles.active=pro"]
##appname:不同jar包名称,确保jar包和DockerFile在一起 img_tag:镜像标签
docker build --build-arg APPNAME=$appname -t $img_tag .
演示demo全局流水线并行脚本
def build = "jenkins-${JOB_NAME}-${BUILD_NUMBER}"
def remoteDir = "/home/www"
def remoteHost = "192.168.1.102"
def credentialsId = "sfgdffghfghfngf"
def remoteUser = "root"
pipeline {
agent any
stages {
stage('环境检查') {
steps {
echo "${params}"
sh 'mvn --version'
echo '开始拉取代码.....'
}
}
stage('构建jar包') {
steps {
sh 'jps'
sh 'ls'
}
}
stage('发送至指定服务器') {
steps {
withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
echo "区分构建ID: ${build}"
echo "项目构建结果路径:${WORKSPACE}"
sh "chmod 600 ${pem}"
sh "touch aaa.sh"
sh "scp -i ${pem} ${WORKSPACE}/aaa.sh root@${remoteHost}:${remoteDir}"
sh "ssh -i ${pem} root@${remoteHost} \"chmod +x ${remoteDir}/aaa.sh \" "
echo '发送成功'
}
}
}
stage('服务启动') {
failFast true
parallel {
stage('部署A服务') {
steps {
withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
echo "开始部署A服务"
sh "chmod 600 ${pem}"
sh "ssh -i ${pem} root@${remoteHost} \" jps \" "
}
}
}
stage('部署C服务') {
steps {
withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
echo "开始部署B服务"
sh "chmod 600 ${pem}"
sh "ssh -i ${pem} root@${remoteHost} \" jps \" "
}
}
}
stage('部署D服务') {
steps {
withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
echo "开始部署C服务"
sh "chmod 600 ${pem}"
sh "ssh -i ${pem} root@${remoteHost} \" jps\" "
}
}
}
}
}
stage('部署E服务') {
steps {
withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
echo "开始部署E服务"
sh "chmod 600 ${pem}"
sh "ssh -i ${pem} root@${remoteHost} \" jps \" "
}
}
}
}
post {
success {
echo 'I succeeeded!'
}
}
}
最后
- 求赞求关注,有问题请留言
- 文章来源公众号
苏克分享
评论区