提交 a69b6c96 authored 作者: wangmenglong's avatar wangmenglong

首次部署

上级 9063ac01
/node_modules/
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/jft-node-channel.iml" filepath="$PROJECT_DIR$/.idea/jft-node-channel.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
FROM node:20.11.1-alpine
RUN mkdir -p /home/web
ADD . /home/web
WORKDIR /home/web
COPY package*.json ./
RUN npm fund
RUN npm audit fix --force
RUN npm audit
RUN npm install
#RUN npm run build
ENV LANG C.UTF-8
EXPOSE ${PORT}
CMD ["sh","-c","node /home/web/app.js ${PORT}"]
\ No newline at end of file
def git_url="https://gitlab.365jft.com/root/jft-node-channel.git"
def credentialsId_val="5a1987eb-5b29-4886-b6d5-fc8d7ba94bbe" //git凭据
def harbor_url="172.30.156.70:8081"
def harbor_pro_name="jft"
def harbor_auth="29244d80-2457-4753-9912-04bd9233569c"
def project_version = "${project_version}".split(',') // 替换为要检查的属性名
def checkArray=new String[1]
def versionArray=new String[1]
def proStr = ''
def versionStr = ''
def tag= "latest" //版本
def operate = "${operate}"
def operateType= "web"
def kube_space="jft-cloud"
def part = "${part}"
def gray = "${gray}"
def proArray=["jft-node-channel"]
if (operate == "release") {
node {
stage('pull code') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
extensions: [], userRemoteConfigs: [[credentialsId: "${credentialsId_val}",
url: "${git_url}"]]])
def n=0
for(int i = 0;i < project_version.size(); i++){
if (i % 2 == 0){
checkArray[n] = project_version[i];
versionArray[n] = project_version[i+1];
n++
}
}
for(int i = 0; i < checkArray.size(); i++){
if (checkArray[i]=="true"){
def pro = proArray[i]
def ver = versionArray[i]
proStr = proStr + pro
proStr = proStr + ','
versionStr = versionStr + ver
versionStr = versionStr + ','
}
}
proStr = proStr.substring(0 , proStr.size() -1 )
versionStr = versionStr.substring(0 , versionStr.size() - 1)
echo 'pull code over--------------------------------------------------------------------------------------------'
}
stage('build images') {
for(int i = 0; i < checkArray.size(); i++){
if (checkArray[i] == "true") {
def pro = proArray[i]
def version = versionArray[i]
sh "docker build -t ${pro}:${tag} ./"
sh "docker tag ${pro}:latest ${harbor_url}/${harbor_pro_name}/${pro}:${version}"
}
}
echo 'build images over--------------------------------------------------------------------------------------'
}
stage('push images') {
withCredentials([usernamePassword(credentialsId: "${harbor_auth}",
passwordVariable: 'pwd', usernameVariable: 'account')]) {
sh "docker login -u ${account} -p ${pwd} ${harbor_url}"
for(int i = 0;i < checkArray.size(); i++){
if (checkArray[i]=="true"){
def pro = proArray[i]
def version = versionArray[i]
sh "docker push ${harbor_url}/${harbor_pro_name}/${pro}:${version}"
}
}
}
echo 'push images over------------------------------------------------------------------------------------------'
}
stage('clean images') {
for(int i = 0;i < checkArray.size(); i++){
if (checkArray[i] == "true"){
def pro = proArray[i]
def version = versionArray[i]
sh "docker rmi ${pro}:${tag}"
sh "docker rmi ${harbor_url}/${harbor_pro_name}/${pro}:${version}"
}
}
echo 'clean images over------------------------------------------------------------------------------------------'
}
stage('remote deploy') {
echo 'kube_space------------------------------------------------------------------------------------------'+"${kube_space}"
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-m0',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/deploy.sh $proStr $versionStr $operateType $kube_space $harbor_pro_name $gray $part",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'deploy over--------------------------------------------------------------------------------------------------------'
}
}
}
if (operate == "delete") {
node{
stage('clean harbor'){
def n=0
for(int i = 0;i < project_version.size(); i++){
if (i % 2 == 0){
checkArray[n] = project_version[i];
versionArray[n] = project_version[i+1];
n++
}
}
for(int i = 0; i < checkArray.size(); i++){
if (checkArray[i]=="true"){
def pro = proArray[i]
def ver = versionArray[i]
echo '-------------------------------------------------------------pro===='+pro
def response = sh returnStdout: true, script: 'curl -u "admin:hbrLyjft@xggq!" -X DELETE "http://172.30.156.70:8081/api/v2.0/projects/odd-job/repositories/"'+"${pro}"
proStr = proStr + pro
proStr = proStr + ','
versionStr = versionStr + ver
versionStr = versionStr + ','
}
}
proStr = proStr.substring(0 , proStr.size() -1 )
versionStr = versionStr.substring(0 , versionStr.size() - 1)
echo 'clean kube--------------------------------------------------------------------------------------------------------'
}
stage('clean kube') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-m0',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/delete.sh $proStr $versionStr $operateType $kube_space $harbor_pro_name $gray $part",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean kube--------------------------------------------------------------------------------------------------------'
sleep(40)
}
stage('clean images jft-n0') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-n0',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/images-delete.sh $proStr $versionStr $harbor_pro_name",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean images jft-n0--------------------------------------------------------------------------------------------------------'
}
stage('clean images jft-n1') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-n1',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/images-delete.sh $proStr $versionStr $harbor_pro_name",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean images jft-n1--------------------------------------------------------------------------------------------------------'
}
stage('clean images jft-n2') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-n2',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/images-delete.sh $proStr $versionStr $harbor_pro_name",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean images jft-n2--------------------------------------------------------------------------------------------------------'
}
}
}
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const {createProxyMiddleware} = require('http-proxy-middleware');
const history = require('connect-history-api-fallback');
var app = express();
//下面两行代码解决刷新404(加上下面两行代码微信扫码登录不能用)
// app.use(history());
// app.use(express.static(__dirname+'/public'));
app.use(express.static(path.join(__dirname, 'public')));
var param = process.argv.splice(2);
var port = param[0];
// 允许所有域名跨域
app.all('*', function (req, res, next) {
req.header("gray","yes");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("gray", ' yes');
console.log("=============prod123");
// 跨域请求CORS中的预请求
if (req.method == "OPTIONS") {
// res.send(200); //让options请求快速返回
} else {
next();
}
});
app.use('/djl-account',
createProxyMiddleware({
target: "http://djl-account",
changeOrigin: true,
pathRewrite: {
"^/djl-account": "/"
}
}));
app.use('/djl-archives',
createProxyMiddleware({
target: "http://djl-archives",
changeOrigin: true,
pathRewrite: {
"^/djl-archives": "/"
}
}));
app.use('/djl-attendance',
createProxyMiddleware({
target: "http://djl-attendance",
changeOrigin: true,
pathRewrite: {
"^/djl-attendance": "/"
}
}));
app.use('/djl-auth',
createProxyMiddleware({
target: "http://djl-auth",
changeOrigin: true,
pathRewrite: {
"^/djl-auth": "/"
}
}));
app.use('/djl-contract',
createProxyMiddleware({
target: "http://djl-contract",
changeOrigin: true,
pathRewrite: {
"^/djl-contract": "/"
}
}));
app.use('/djl-message',
createProxyMiddleware({
target: "http://djl-message",
changeOrigin: true,
pathRewrite: {
"^/djl-message": "/"
}
}));
app.use('/djl-oss',
createProxyMiddleware({
target: "http://djl-oss",
changeOrigin: true,
pathRewrite: {
"^/djl-oss": "/"
}
}));
app.use('/djl-project',
createProxyMiddleware({
target: "http://djl-project",
changeOrigin: true,
pathRewrite: {
"^/djl-project": "/"
}
}));
app.use('/djl-recruit',
createProxyMiddleware({
target: "http://djl-recruit",
changeOrigin: true,
pathRewrite: {
"^/djl-recruit": "/"
}
}));
app.use('/djl-role',
createProxyMiddleware({
target: "http://djl-role",
changeOrigin: true,
pathRewrite: {
"^/djl-role": "/"
}
}));
app.use('/djl-salary',
createProxyMiddleware({
target: "http://djl-salary",
changeOrigin: true,
pathRewrite: {
"^/djl-salary": "/"
}
}));
app.use('/djl-settlement',
createProxyMiddleware({
target: "http://djl-settlement",
changeOrigin: true,
pathRewrite: {
"^/djl-settlement": "/"
}
}));
app.listen(port);
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('jft-node-channel:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
差异被折叠。
{
"name": "jft-node-channel",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"connect-history-api-fallback": "^2.0.0",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-proxy-middleware": "^3.0.0",
"morgan": "~1.9.1"
}
}
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论