jenkins部署请参考以下文档
Docker部署jenkins_jenkins docker部署-CSDN博客
1.安装Docker Pipeline && Publish Over SSH
1.1点击设置---点击插件
1.2 搜索 Docker Pipeline进行安装 Publish Over SSH 也是同理操作
因为我这边安装了 所以搜索不出来,安装后的插件可以在installed plugins查看
这边查看已经安装完成了
2.创建流水线
2.1 点击新建任务--选择流水线模式
2.2这里我们以前端项目为例
jenkinsfile详情
pipeline {
agent any
environment {
image_name = "nanbindaping"
image_host = '10.10.111.23:888'
image_passwd = "admin@123"
image_user = "admin"
image_data = "test"
title = "南滨大屏工程构建"
prot = "80"
dev ="dev"
}
stages {
stage('拉取代码') {
agent {
docker {
image 'node:14-alpine'
reuseNode true
}
}
steps {
//checkout scmGit(branches: [[name: '${dev}']], extensions: [],
//userRemoteConfigs: [[credentialsId: 'd9e60a0d-7b25-453a-99c7-da773cd14808',
//url: 'https://gitee.com/tongyinhao/test01.git']])
checkout scmGit(branches: [[name: '*/DEV']], extensions: [],
userRemoteConfigs: [[credentialsId: 'e184bd97-e924-42a3-a92e-ea15ba24d4f1',
url: '[email protected]:risenenergy/risheng-nab-screen.git']])
echo "\n--------------------------打包完成&&开始编译----------------------------\n"
}
}
stage('打包代码') {
agent {
docker {
image 'node:14-alpine'
reuseNode true
}
}
steps {
sh 'pwd && ls -l'
//sh 'npm config set registry https://registry.npmjs.org/'
//sh 'npm config set proxy false && npm cache clean'
sh 'npm config set registry https://registry.npmmirror.com/'
sh 'npm install && npm run build '
echo "\n------------------------编译完成开始构建镜像-----------------------------\n"
}
}
stage('构建镜像') {
steps {
sh 'pwd && ls -l '
//sh 'cp -r dist ./devops_build'
//sh 'docker -v '
// 构建镜像
sh 'docker build -t ${image_host}/${image_data}/${image_name}:${dev} .'
// 登录地址
//sh 'docker login -u${image_user} -p${image_passwd} ${image_host}'
//推送镜像
//sh 'docker push ${image_host}/${image_data}/${image_name}:${dev}'
sh 'docker save -o /root/nanbing.tar.gz ${image_host}/${image_data}/${image_name}:${dev} '
## 0.0.0.0写服务运行的地址
sh 'scp /root/nanbing.tar.gz 0.0.0.0:/root '
sh 'rm -rf /root/nanbing.tar.gz '
sh 'docker rmi ${image_host}/${image_data}/${image_name}:${dev}'
echo "\n---------------------镜像推送完成------------------------------\n"
}
}
stage('部署应用') {
steps {
echo '\n-------------------------现在就开始部署----------------------\n'
sh 'pwd && ls -l'
sshPublisher(publishers: [sshPublisherDesc(configName: "nanbin-screen01",
transfers: [sshTransfer(cleanRemote: false, excludes: '',
execCommand: " chmod +x /root/work/deploy.sh && dos2unix /root/work/deploy.sh &&bash /root/work/deploy.sh ${image_host} ${image_data} ${image_name} ${dev} ${prot}",
execTimeout: 1080000, flatten: false, makeEmptyDirs: true,
noDefaultExcludes: false, patternSeparator: '[, ]+',
remoteDirectory: "/root/work/", remoteDirectorySDF: false,
removePrefix: '', sourceFiles: "deploy.sh")], usePromotionTimestamp: false,
useWorkspaceInPromotion: false, verbose: true)])
}
}
}
}
3 jenkinsfile说明
3.1变量说明
environment {
image_name = "nanbindaping"
image_host = '10.10.111.23:888'
image_passwd = "admin@123"
image_user = "admin"
image_data = "test"
title = "南滨大屏工程构建"
prot = "80"
dev ="dev"
}
全局变量方便后面进行使用
3.2 docker字段说明
docker {
image 'node:14-alpine'
reuseNode true
}
这里是指定我们需要的nodejs的版本 可以根据前端的项目需求自行进行调节镜像的版本,比如前端需要18版本的nodejs的版本 ,只需要在安装jenkins的机器上拉取一个18版本的镜像,然后这image这里做更改即可,当设置reuseNode
设置为true
时:不会创建新的工作区,当前代理的当前工作区将被装入容器,且将在同一节点上启动该容器,所以整体数据将被同步
3.3 拉取代码说明
stage('拉取代码') {
agent {
docker {
image 'node:14-alpine'
reuseNode true
}
}
steps {
checkout scmGit(branches: [[name: '*/DEV']], extensions: [],
userRemoteConfigs: [[credentialsId: 'e184bd97-e924-42a3-a92e-ea15ba24d4f1',
url: '[email protected]:risenenergy/risheng-nab-screen.git']])
echo "\n--------------------------打包完成&&开始编译----------------------------\n"
}
}
steps下的checkout 我们可以根据jenkins提供的模版进行生成,请参考以下示例
点击流水线语法
选择对应的checkout
填写模版生成脚本
3.4 打包代码说明
stage('打包代码') {
agent {
docker {
image 'node:14-alpine'
reuseNode true
}
}
steps {
sh 'pwd && ls -l'
sh 'npm config set registry https://registry.npmmirror.com/'
sh 'npm install && npm run build '
echo "\n------------------------编译完成开始构建镜像-----------------------------\n"
}
}
这里就是替换了一下源地址然后安装编译
3.5 镜像构建说明
stage('构建镜像') {
steps {
sh 'pwd && ls -l '
// 构建镜像
sh 'docker build -t ${image_host}/${image_data}/${image_name}:${dev} .'
// 登录地址
//sh 'docker login -u${image_user} -p${image_passwd} ${image_host}'
//推送镜像
//sh 'docker push ${image_host}/${image_data}/${image_name}:${dev}'
sh 'docker save -o /root/nanbing.tar.gz ${image_host}/${image_data}/${image_name}:${dev} '
## 0.0.0.0改成服务运行的节点
sh 'scp /root/nanbing.tar.gz 0.0.0.0:/root '
sh 'rm -rf /root/nanbing.tar.gz '
sh 'docker rmi ${image_host}/${image_data}/${image_name}:${dev}'
echo "\n---------------------镜像推送完成------------------------------\n"
}
}
这里因为push镜像过于缓慢,所以直接将镜像打包直接推送到要运行容器的节点上
3.6 应用部署说明
stage('部署应用') {
steps {
echo '\n-------------------------现在就开始部署----------------------\n'
sh 'pwd && ls -l'
sshPublisher(publishers: [sshPublisherDesc(configName: "nanbin-screen01",
transfers: [sshTransfer(cleanRemote: false, excludes: '',
execCommand: " chmod +x /root/work/deploy.sh && dos2unix /root/work/deploy.sh &&bash /root/work/deploy.sh ${image_host} ${image_data} ${image_name} ${dev} ${prot}",
execTimeout: 1080000, flatten: false, makeEmptyDirs: true,
noDefaultExcludes: false, patternSeparator: '[, ]+',
remoteDirectory: "/root/work/", remoteDirectorySDF: false,
removePrefix: '', sourceFiles: "deploy.sh")], usePromotionTimestamp: false,
useWorkspaceInPromotion: false, verbose: true)])
}
}
这块部署应用是依赖Publish Over SSH 插件 先对部署服务进行免密认证
点击设置点击系统 找到Publish Over SSH 进行配置
配置完成后配置流水线脚本模版 注意如果没有安装Publish Over SSH 是不会有这个脚本生成的模版的
点击下方生成脚本添加到jenkinsfile上
配置完成后开始构建