用jenkins创建一个流水线项目,实现自动打包、部署的功能。
一、创建项目
点击新建Item,进入以下页面
填写任务名称,也就是项目名称,选择流水线,点击确定,进入以下页面,
在脚本中填写的我们的执行脚本。
二、 创建凭据
点击图1的凭据,进入的页面如下,有一个创建按钮,点击,
选择ssh模式,填写ID、Username、Private Key。ID为该凭据的唯一标识,在pipline脚本中用于和服务器进行身份验证的凭证。Username是登录服务器的用户名、Private Key是服务器的私钥。
一切填写完毕之后,点击Create按钮。
三、 编写脚本
def date = new Date().format('yyyy-MM-dd')
pipeline {
parameters {
choice choices: ['deploy', 'rollback'], description: '请选择构建操作:发布、回滚', name: 'MODE'
choice(name: 'GIT_BRANCH', choices:['dev', 'release'], description:'进行deploy时,请选择即将构建的分支')
choice(name: 'IS_INSTALL', choices:['false', 'true'], description:'进行deploy时,请选择是否安装依赖')
}
// triggers {
// pollSCM ('H/10 * * * *')
// }
agent {
node {
// 这里的label值为前端node的节点,可以问运维
label 'xxx'
}
}
// 默认
environment {
// 项目名称
project = "www"
// git地址
git_url = "git@git.xxxx.git"
// 分支
git_branch = "dev"
// 部署机器的IP地址
deploy_host = '127.0.0.1'
// 当前git_branch分支对应的凭据名称
userId = 'test1'
}
stages {
stage('初始化') {
steps{
script {
git_branch="${params.GIT_BRANCH}"
}
}
}
stage('检出代码') {
when {
environment name: 'MODE', value: 'deploy'
}
steps {
echo "开始拉取最新代码"
echo "当前分支${git_branch}"
// 这里的credentialsId值为前端的节点,可以问运维
git credentialsId: 'fe-xx', branch: "${git_branch}", url: "${git_url}"
echo "代码检出成功"
}
}
stage('安装依赖') {
when {
allOf{
environment name: 'MODE', value: 'deploy'
environment name: 'IS_INSTALL', value:'true'
}
}
steps {
echo '安装依赖'
sh "ls"
sh 'npm install'
echo '依赖安装完成'
}
}
stage('编译打包') {
when {
environment name: 'MODE', value: 'deploy'
}
steps {
echo '开始打包'
sh 'npm run dll'
sh 'npm run dist'
echo '打包完成'
}
}
stage('远程部署') {
when {
environment name: 'MODE', value: 'deploy'
}
steps {
script {
switch(git_branch) {
case 'dev':
deploy_host='127.0.0.1'
userId='test1'
break
case 'release':
deploy_host='127.0.0.2'
userId='test2'
break
}
}
echo "开始部署"
echo "部署环境为: ${git_branch}(${deploy_host})"
withCredentials([sshUserPrivateKey(credentialsId: "${userId}", keyFileVariable: 'keyfile')]){
sh "scp -o StrictHostKeyChecking=no -i ${keyfile} -r ./dist/* root@${deploy_host}:/data/front/"
}
echo '部署完成'
}
}
}
post {
success {
// One or more steps need to be included within each condition's block.
echo "${MODE}成功"
}
unsuccessful {
// One or more steps need to be included within each condition's block.
echo "构建失败"
}
}
}
这里不同的环境,应该有自己的唯一凭据。