Jenkins流水线脚本(包含本地,远程,以及k8s)

Jenkins流⽔线脚本(包含本地,远程,以及k8s)Jenkins流⽔线脚本
前⾔
1. 流⽔线使构建过程更加清晰明了,⼯作量更⼩,今天就做个总结,进攻参考
流⽔线命令
1. jenkins和程序运⾏服务器在⼀块⼉(本地环境)
1. 后端
def git_address ="15:8160/xxx/xxx.git"
def git_auth ="87791646-e23e-4b09-bf31-36f4c56e81ce"
def project_repo ="xxx_home"
def profix ="test-"
def maven_home ="/home/jenkins/maven-v3.6.3/bin"
def hosts =""
def server_dest ="/opt/server/javaApp/xxx/test"
def server_bin ="/opt/server/bin/xxx/test"
def file ="xxx-file"
def system ="xxx-system"
def job ="xxx-job"
def file_with_module ="xxx-modules-file"
def system_with_module ="xxx-modules-system"
def job_with_module ="xxx-modules-job"
def parent ="xxx-modules"
pipeline {
agent any
stages {
stage('拉取代码'){
steps {
checkout([$class:'GitSCM', branches:[[name:'${branch}']],
userRemoteConfigs:[[credentialsId:"${git_auth}", url:"${git_address}"]]])
}
}
stage('打包'){
steps {
sh "${maven_home}/mvn clean install -st.skip=true"
}
}
stage('推送服务器'){
steps {
script {
def target_host ="${hosts}".split(',')
def selected_projects ="${params.project_name}".split(',')
for(int i=0;i<target_host.size();i++){
current_host = target_host[i]
for(int j=0;j<selected_projects.size();j++){
//取出每个项⽬的名称
currentProject = selected_projects[j];
//项⽬名称
if("${currentProject}"=="${system_with_module}"){
abs082sh "mv ${parent}/${system}/target/*.jar ${parent}/${system}/target/${profix}${currentProject}.jar"
sh "cp ${parent}/${system}/target/*.jar ${server_dest}"
sh "sh ${server_bin}/${currentProject}.sh start"
}else if("${currentProject}"=="${file_with_module}"){
sh "cp ${parent}/${file}/target/*.jar ${server_dest}"
sh "sh ${server_bin}/${currentProject}.sh start"
}else if("${currentProject}"=="${job_with_module}"){
sh "mv ${parent}/${job}/target/*.jar ${parent}/${job}/target/${profix}${currentProject}.jar"
sh "cp ${parent}/${job}/target/*.jar ${server_dest}"
sh "sh ${server_bin}/${currentProject}.sh start"
}else{
sh "mv $currentProject/target/*.jar $currentProject/target/${profix}${currentProject}.jar"
sh "cp $currentProject/target/*.jar ${server_dest}"
sh "sh ${server_bin}/${currentProject}.sh start"
}
}
}
sh "${maven_home}/mvn clean"
}
}
}
}
}
2. 前端
def git_address =":8160/xxx/xxx_ui.git"
def git_auth ="87791646-e23e-4b09-bf31-36f4c56e81ce"
def node_home ="/home/jenkins/node-v14.17.0/bin"
def host =""
def server_dest ="/opt/server/dist/xxx/test"
pipeline {
agent any
stages {
stage('拉取代码'){
steps {
checkout([$class:'GitSCM', branches:[[name:'${branch}']],
userRemoteConfigs:[[credentialsId:"${git_auth}", url:"${git_address}"]]])
}
}
stage('打包'){
steps {
sh """
rm -rf dist
${node_home}/npm install
${node_home}/npm run build:prod
"""
}
}
stage('推送服务器'){
steps {
script {
sh "cp -r dist/* ${server_dest}"
}
}
}
}
}
2. jenkins和程序运⾏服务器不在⼀块⼉(远程环境)
1. 后端
def git_address =":8160/xxx/xxx.git"
def git_auth ="87791646-e23e-4b09-bf31-36f4c56e81ce"
def project_repo ="xxx_home"
def hosts ="xxx.26.223.108,xxx.26.222.194,xxx.26.210.213"
def server_dest ="/opt/server/javaApp"
def server_bin ="/opt/server/bin"
def file ="xxx-file"
def system ="xxx-system"
def job ="xxx-job"
def file_with_module ="xxx-modules-file"
def system_with_module ="xxx-modules-system"
def job_with_module ="xxx-modules-job"
def parent ="xxx-modules"
pipeline {
// 没有 agent 指令的话, 声明式流⽔线不仅⽆效, 它也不可能完成任何⼯作 "xxx.26.222.194,xxx.26.210.213,xxx.26.223.108"
agent any
stages {
stage('拉取代码'){
steps {
checkout([$class:'GitSCM', branches:[[name:'${branch}']],
userRemoteConfigs:[[credentialsId:"${git_auth}", url:"${git_address}"]]])
}
}
stage('打包'){
steps {
sh "${maven_home}/mvn clean install -st.skip=true"
}
}
stage('推送服务器'){
steps {
script {
def target_host ="${hosts}".split(',')
def selected_projects ="${params.project_name}".split(',')
for(int i=0;i<target_host.size();i++){
current_host = target_host[i]
for(int j=0;j<selected_projects.size();j++){
//取出每个项⽬的名称
currentProject = selected_projects[j];
/
/项⽬名称
if("${currentProject}"=="${system_with_module}"){
sh "rsync ${parent}/${system}/target/*.jar root@${current_host}:${server_dest}"
sh "ssh root@${current_host} sh ${server_bin}/${currentProject}.sh start ${server_bin}"
}else if("${currentProject}"=="${file_with_module}"){
sh "rsync ${parent}/${file}/target/*.jar root@${current_host}:${server_dest}"
sh "ssh root@${current_host} sh ${server_bin}/${currentProject}.sh start ${server_bin}"
}else if("${currentProject}"=="${job_with_module}"){
蒸汽回收机sh "rsync ${parent}/${job}/target/*.jar root@${current_host}:${server_dest}"
sh "ssh root@${current_host} sh ${server_bin}/${currentProject}.sh start ${server_bin}"
}else{
双扣管sh "rsync $currentProject/target/*.jar root@${current_host}:${server_dest}"
sh "ssh root@${current_host} sh ${server_bin}/${currentProject}.sh start ${server_bin}"
}
}
}
sh "${maven_home}/mvn clean"
}
}
}
}
}
2. 前端
def git_address =":8160/xxx/xxx_ui.git"
def git_auth ="87791646-e23e-4b09-bf31-36f4c56e81ce"
def host ="xxx.26.202.129"
def server_dest ="/opt/server/dist"
def server_bin ="/opt/server/bin"
def rmdist ="rmdist"
pipeline {
// 没有 agent 指令的话, 声明式流⽔线不仅⽆效, 它也不可能完成任何⼯作
agent any
stages {
stage('拉取代码'){
steps {
checkout([$class:'GitSCM', branches:[[name:'${branch}']],
userRemoteConfigs:[[credentialsId:"${git_auth}", url:"${git_address}"]]])
}
}
stage('打包'){
steps {
sh """
rm -rf dist
${node_home}/npm install
${node_home}/npm run build:prod
"""
}
}
stage('推送服务器'){
steps {
script {
sh "ssh root@${host} sh ${server_bin}/${rmdist}.sh"
sh "rsync -r dist/* root@${host}:${server_dest}"
}
}
}
}
}
3. jenkins被整合在k8s中(k8s)
def git_address ="gitlab.rb/qwer/tegent.git"
def git_auth ="cf922df0-38c4-46b4-a556-fa0604138e20"
//构建版本的名称
def tag ="latest"
//Harbor私服地址
def harbor_url ="harbor.od"
//Harbor的项⽬名称
def harbor_project_name ="tensquare"
//Harbor的凭证
def harbor_auth ="bbcb94c0-8f1d-4214-bd3c-76edf52cd244"
//k8s的凭证
def k8s_auth ="1d425ea5-f25a-44c1-bfde-e9bcd311a8b8"
//定义k8s-harbor的凭证
def secret_name ="kubernetes-admin-token-d5snf"
def file ="tegent-file"
def system ="tegent-system"
def file_with_module ="tegent-modules-file"
def system_with_module ="tegent-modules-system"
def parent ="tegent-modules"
def api ="tegent-api"
def common ="tegent-common"
//pod模板
podTemplate(label:'jenkins-slave', cloud:'kubernetes', containers:[
containerTemplate(
name:'jnlp',
image:"harbor.od/public/jenkin-with-maven:v3.6.2"
containerTemplate(
name:'docker',
image:"docker:stable",
ttyEnabled:true,
command:'cat'
),
],
volumes:[
hostPathVolume(mountPath:'/var/run/docker.sock', hostPath:'/var/run/docker.sock'),
nfsVolume(mountPath:'/usr/local/apache-maven/repo', serverAddress:'192.168.0.153', serverPath:'/opt/nfs/maven'),
],
)
{
node("jenkins-slave"){
// 第⼀步
stage('拉取代码'){
checkout([$class:'GitSCM', branches:[[name:'${branch}']],
userRemoteConfigs:[[credentialsId:"${git_auth}", url:"${git_address}"]]])
}
// 第⼆步
stage('代码编译'){
医用呼叫器
sh "mvn clean install -pl ${common} -am -st.skip=true -Ddockerfile.skip"
}
// 第三步
stage('构建镜像,部署项⽬'){
/
/把选择的项⽬信息转为数组
def selectedProjects ="${project_name}".split(',')
def home ="$PWD"
def destination ='src/main/resources'
def docker_file_home =''
def login_num ='1'
for(int i=0;i<selectedProjects.size();i++){
//取出每个项⽬的名称和端⼝
def currentProject = selectedProjects[i];
//项⽬名称
def currentProjectName = currentProject.split('@')[0]
/
/项⽬启动端⼝
def currentProjectPort = currentProject.split('@')[1]
//定义镜像名称注意:在构建过程会发现⽆法创建仓库⽬录,是因为NFS共享⽬录权限不⾜,需更改权限
//还有Docker命令执⾏权限问题
//需要⼿动上传⽗⼯程依赖到NFS的Maven共享仓库⽬录中
//微服务部署到K8S
def imageName ="${currentProjectName}:${tag}"
if("${currentProjectName}"=="${system_with_module}"){
sh "mvn -f ${parent}/${system} clean package -st.skip=true dockerfile:build"
}else if("${currentProjectName}"=="${file_with_module}"){
sh "mvn -f ${parent}/${file} clean package -st.skip=true dockerfile:build"
}else{
sh """
sed -i 's/prod/test/g' ${currentProjectName}/Dockerfile
"""
风能汽车
sh "mvn -f ${currentProjectName} clean package -st.skip=true dockerfile:build"
}
container('docker'){
//给镜像打标签
防护服生产线设备
sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"
//登录Harbor,并上传镜像
withCredentials([usernamePassword(credentialsId:"${harbor_auth}", passwordVariable:'password', usernameVariable:'username')]){    echo "${login_num}"
if("${login_num}"=='1'){
echo "${login_num}"
//登录
sh "docker login -u ${username} -p ${password} ${harbor_url}"

本文发布于:2024-09-24 09:25:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/225320.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:构建   镜像   上传   权限   名称
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议