我也是很久没写过文章了,刚好公司最近一直在部署项目,我这边刚好参与,所以想把自己部署的流程写下来,共大家参考,好废话不多说开整。
项目这块我就不说了,相信大家已经参与到部署这块,那项目应该是已经了解知道把项目打包成静态文件了
首先:要跟公司的运维人员要一个jenkins账号,因为一般项目的发版都需要运维人员,如果没有需要自己整一个,接下来是登录jenkins后的页面
由于公司的硬件要求,我偷偷加了点马赛克,望大佬谅解。
如上图,这边可以自己新建一个项目点击New Item,注意这里新建的项目要点流水线如下图
然后在点OK就完事了。到这我们的项目算是新建完成了,接下来想要在jenkins上构建,走流水线工程化,需要在我们的项目下配置如图所示
点击configure配置项,进入配置项目直接拉到最下边,其他的配置不东,如图
也就是拉到Pipeline这项,按选择配置项,第一项Definition选择Pipeline script from SCM,第二项SCM选择GIT,这里git是一个链接配置,我下边把代码放出来,然后是Credentials这项是选有权限的人员(一般选择自己),Branches to build是选择git链接的分支,最下边还有一项Script Path是git链接的脚本名称.
git链接的配置脚本
`node {
def label = "mypod-${UUID.randomUUID().toString()}"
def git_link = "git.xxx.com/xxx/xxxx.gi…"
def branch = '*/develop'
def app_name = 'smc-core-web'
def imageTag = "latest"
podTemplate(label: label, cloud: 'kubernetes',
containers: [
containerTemplate(
name: 'jnlp',
image: '10.58.239.195/devops/jenkins-slave-node:v1.2',
alwaysPullImage: false,
// args: '${computer.jnlpmac} ${computer.name}'
),
],
volumes: [
hostPathVolume(mountPath: '/var/run/docker.sock',hostPath: '/var/run/docker.sock'),
hostPathVolume(mountPath: '/usr/bin/docker',hostPath: '/usr/bin/docker'),
hostPathVolume(mountPath: '/usr/lib/libdevmapper.so.1.02',hostPath: '/lib64/libdevmapper.so.1.02'),
hostPathVolume(mountPath: '/usr/lib/libltdl.so.7',hostPath: '/usr/lib/x86_64-linux-gnu/libltdl.so.7'),
]
) {
node(label) {
stage('Checkout') {
checkout([$class: 'GitSCM', branches: [[name: "${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'GITLIB_ID', url: "${git_link}"]]])
}
stage('Build&Push') {
sh """npm config list
npm config set registry http://10.58.248.195/repository/npm/ #npm config list
#npm install node-sass --sass_binary_site=npm.taobao.org/mirrors/nod… #npm install node-sass --unsafe-perm=true --allow-root #npm install chalk --unsafe-perm=true --allow-root npm install --ignore-scripts --unsafe-perm=true --allow-root npm -U install -g --unsafe-perm=true --allow-root
npm run build:prod --unsafe-perm=true --allow-root
"""
}
stage('Build&Push') {
withCredentials([usernamePassword(credentialsId: 'Harbor_195', passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
docker login -u password http://10.58.239.195/ docker build -t 10.58.239.195/secp-smc/dev/{imageTag} . docker push 10.58.239.195/secp-smc/dev/{imageTag} """ } }
stage('Deploy') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'lec_dev_deploy_host', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
kubectl patch deployment smc-web-server -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\": \"date +'%s'\"}}}}}" -n secp
''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}这里说下变化的地方 1.git_link:是你需要打包的git的项目地址 2.branch:是你需要打包的项目的分支 3.app_name:是你项目的名字 接下来是这个地方stage('Build&Push') {
withCredentials([usernamePassword(credentialsId: 'Harbor_195', passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
docker login -u password http://10.58.239.195/
docker build -t 10.58.239.195/secp-smc/dev/{imageTag} .
docker push 10.58.239.195/secp-smc/dev/{imageTag}
"""
}
}`
10.58.239.195/secp-smc/dev/这是镜像中的路径(这块是运维配的,这块也不是很懂,如果没有运维,我自己的理解是这块是你服务器的路径)
还有最后这块
stage('Deploy') { sshPublisher(publishers: [sshPublisherDesc(configName: 'lec_dev_deploy_host', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: ''' kubectl patch deployment smc-web-server -p \"{\\\"spec\\\":{\\\"template\\\":{\\\"metadata\\\":{\\\"annotations\\\":{\\\"date\\\": \\\"date +'%s'\\\"}}}}}\" -n secp ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) }
这里的configName:这里是运维配置的(我的理解这里应该是一个文件名)
这里的smc-web-server是文件名,后边的secp是目录(换句话说就是在哪个目录下)。
讲到这基本就结束了,后边还有nacos配置,还有yml文件配置,我在这就不赘述了,怕大佬喷。
希望大佬帮忙指点其中不妥的地方,及时修正,免得误导他人,再次谢谢。