jenkens流水线案例
#!groovy
def getHost(){
def remote = [:]
remote.name = ''
remote.host = ''
remote.user = ''
remote.port =
remote.password = ''
remote.allowAnyHosts = true
return remote
}
pipeline {
agent any
environment {
repoUrl = "http://xxx.git"
sonarqube = "http://..."
sonarqube_user = ""
sonarqube_projectkey = ""
sonarqube_projectName = ""
sonarqube_language = "vue"
}
parameters {
string(name:'repoBranch', defaultValue: 'publish', description: 'git分支名称')
}
tools {
maven 'maven_...'
jdk 'JDK_...'
nodejs 'node_...'
}
triggers {
GenericTrigger(
genericVariables: [
[key: 'branch', value: '$.ref']
],
token: 'DATA-CENTER-WEB' ,
causeString: ' Triggered on $branch' ,
printContributedVariables: true,
printPostContent: true
)
}
stages {
stage('init-server'){
steps {
script {
server = getHost()
}
}
}
stage('get git branch'){
steps{
script{
try{
if("${branch}" != ""){
println "webhook式触发 ......"
branchName = branch - "refs/heads"
branchName = sh(returnStdout: true,script: "echo ${branchName}|awk -F '/' '{print \$NF}'").trim()
println "webhook触发的分支是: " + "${branchName}"
}
} catch(exc) { }
if("${params.repoBranch}" != ""){
println "手动方式触发 ......"
branchName = "${params.repoBranch}"
println "手动触发的分支是: " + "${branchName}"
}
}
}
}
stage('git checkout') {
steps {
echo 'Checkout Start:[repoUrl:'+env.repoUrl+', branch${branchName}:'+branchName+'] ......'
checkout([$class: 'GitSCM', branches: [[name: '*/'+branchName]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '213b8f59-9198-4fe9-b5b9-f5758b93da0f', url: env.repoUrl]]])
}
}
stage('npm run build') {
steps {
// echo 'mvn clean package ......'
sh "npm config set registry https://registry.npm.taobao.org/ "
sh "cd Base \n npm i \n npm run build"
}
}
stage('Login VPN'){
steps {
sshCommand remote: server, command: "cd /usr/vpn \n ./login.sh"
}
}
stage('Image Build'){
steps {
sshCommand remote: server, command: "cd /...\n docker build -f /.../Dockerfile -t data-center-web:latest ."
sshCommand remote: server, command: "docker tag xxx:latest .../xxx:latest"
sshCommand remote: server, command: "docker push .../xxx:latest"
}
}
stage('Publish To K8S'){
steps {
sshCommand remote: server, command: "source /etc/profile \n kubectl delete -f /.../deployment.yaml"
sshCommand remote: server, command: "source /etc/profile \n kubectl apply -f /.../deployment.yaml"
sshCommand remote: server, command: "docker image prune -a -f"
}
}
stage('Logout VPN'){
steps {
sshCommand remote: server, command: "cd /usr/vpn \n ./logout.sh"
}
}
}
}
Dockerfile案例
FROM nginx
MAINTAINER xt
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /usr/share/nginx/html
ADD ./Base/xxx/ ./xxx/
COPY ./nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
#CMD [nginx-debug, '-g', 'daemon off;']
deployment.yaml案例
apiVersion: apps/v1
kind: Deployment
metadata:
name: xxx-deployment
namespace: harbor spacename
labels:
app: xxx
spec:
replicas: 1
selector:
matchLabels:
app: xxx
template:
metadata:
labels:
app: xxx
spec:
containers:
- name: xxx
image: 10.41.3.63:9999/harbor spacename/xxx:latest
env:
- name: TZ
value: Asia/Shanghai
imagePullPolicy: Always
ports:
- containerPort: 80
resources:
limits:
cpu: '1'
memory: 1Gi
requests:
cpu: '0'
memory: 0Gi
imagePullSecrets:
- name: harbor-secret
---
apiVersion: v1
kind: Service
metadata:
name: xxx-svc
namespace: harbor spacename
labels:
run: xxx
spec:
ports:
- name: port
nodePort: 80
port: 80
protocol: TCP
targetPort: 80
selector:
app: xxx
type: NodePort
自定义nginx.conf替换原有案例
events {
worker_connections 1024; ## Default: 1024
}
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 500m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
#gzip on;
upstream xxx {
server ip:port;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
location /xxx {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /xxx/index.html;
}
location = /50x.html {
root html;
}
location /name {
proxy_pass http://xxx/name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
}
location /xxx {
proxy_pass http://ip:port/xxx;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
}
location ~ (/xxx) {
proxy_pass http://xxx;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_read_timeout 900;
proxy_send_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 1024m;
proxy_max_temp_file_size 2048m;
client_max_body_size 1024m;
client_body_buffer_size 128k;
proxy_cache_valid any 4;
expires 10;
}
}
}
具体流程阐述可以查看我上一篇文章,谢谢!