Loading . . .

Jenkins+Pipline+Gitlab实现自动化部署


Jenkins+Pipline+Gitlab实现自动化部署

前置条件

插件安装

本来是照着网上找的教程跟着做的,结果做到一半,发现别人的Ui有的选项我有的找不到,于是又去手敲选项上网去搜,最后发现是自己漏装了插件。因为软工三是要把代码放到Gitlab上,因此主要是从Gitlab上拉代码,这就需要三个插件,分别是Gitlab Hook PluginBuild Authorization Token Root PluginGit plugin(注意,gitlab plugin必须是1.4.2版本以上才能显示UI)。

节点配置

  1. 点击系统管理–节点管理–新建节点,节点名称任意

  2. 下面用我已经建立的节点来做示范

  3. 远程工作目录是Jenkins的安装路径,使用命令行命令安装的Jenkins一般都是这个目录,根据自己的配置自行调整。

  4. 主机即是服务器的ip

  5. 点击Credentials下的添加,将服务器的root用户和密码输入

  6. 保存即可

全局工具配置

  1. 点击系统管理–全局工具配置

  2. 如果虚拟机装了Maven,那么和我的配置类似即可,如果没有,自行装好,注意别名的命名,后面的pipeline脚本要和别名对应

  3. JDK安装同上,如果虚拟机装过了jdk了,注意别名的命名

    如果虚拟机没有装jdk,那么可以使用自动安装

  4. Nodejs我使用的是自动安装,没找到虚拟机装哪了,同样注意别名的命名

与Gitlab项目关联

  1. 新建流水线项目

  2. 将构建触发器下的下图选项勾选上

  3. 在服务器窗口下运行命令openssl rand -hex 12,将生成的密钥输入下列位置

  4. 打开Gitlab,找到想要自动部署的项目,进入settings页面,选择integrations,将第2步图中构建触发器选项中的Gitlab webhook URL复制下来,写到URL处,将第3步生成的Token写到Secret Token处。点击Add webhook

  5. 点击test中的Push events,成功后如图所示

  6. 点击流水线语法

  7. 选择Git

  8. 将项目的仓库地址复制过去,这时会进行报错,那是因为没有添加凭证

  9. 在下方的凭据处添加gitlab认证,用户名和密码均为gitlab的用户名和密码

  10. 这时报错便消失了

  11. 点击生成流水线脚本

  12. 将上面的流水线脚本保存好,接下来写流水线脚本

Pipeline脚本

接下来我会提供两份脚本分别对应前后端的,我会进行注释

前端

pipeline {
   agent any
   tools {
		nodejs "nodejs"   //引号内的名字和全局工具配置里的别名对应
   }
   stages {
		stage('Prepare'){
			steps{
				echo 'Preparing'
				checkout(
                [
                    $class: 'GitSCM', 
                    branches: [[name: '*/master']],   //从哪里拉去
                    doGenerateSubmoduleConfigurations: false, 
                    extensions: [], 
                    submoduleCfg: [], 
                    userRemoteConfigs: [
                        [    ////上面与gitlab关联后第十一步生成的脚本 分别对应复制粘贴过来即可,这里我就不贴自己的了
                            credentialsId: '',  
                            url: ''
                        ]
                    ]
                ]
            )
				sh'''
					npm install  //npm命令
				'''
			}
		}
		stage('Build'){
			steps{
				echo 'Building'
				sh'''
					npm run build
				'''
			}
		}
		stage('Deploy'){
			steps{
				echo 'Deploying'
				sh'''
					 //下面的这个目录/Tomcat/tomcat9/webapps是云服务器中(配置的节点)里的tomcat配置的路径,需要自己改
					 rm -rf /Tomcat/tomcat9/webapps/dist 
					 // /var/lib/jenkins/workspace/Kojima_Studio_frontend是我Jenkins的job的workspace对应的目录
					 mv -f /var/lib/jenkins/workspace/Kojima_Studio_frontend/dist /Tomcat/tomcat9/webapps
				'''
			}
		}
   }
}

后端

pipeline {
   agent any
   tools {
		jdk "jdk8" //引号内的名字和全局工具配置里的别名对应
		maven "maven"
   }
   stages {
		stage('Build') {
			steps {
				checkout(
                [
                    $class: 'GitSCM', 
                    branches: [[name: '*/master']], 
                    doGenerateSubmoduleConfigurations: false, 
                    extensions: [], 
                    submoduleCfg: [], 
                    userRemoteConfigs: [
                        [
                            credentialsId: '', 
                            url: ''
                        ]
                    ]
                ]
            )
            sh "mvn clean install -Dmaven.test.skip=true -Ptest"
         }
		}
		stage('Deploy'){
			steps{
				echo 'Deploying'
				sh '''
					PID=$(ps -ef | grep oasis | grep java | grep -v grep | awk '{ print $2 }')
					if [ -z "$PID"]
					then
						echo Application is already stopped
					else
						echo kill $PID
						kill $PID
					fi
				'''
				withEnv(['JENKINS_NODE_COOKIE=dontkillme']){
				    sh '''
			// 下列目录/var/lib/jenkins/workspace/Kojima_Studio_backend是我Jenkins的job的workspace对应的目录
			// nohup对应的其实是一个运行jar包的命令 jar包的名字需要和项目进行匹配,建议提前定好
    				    nohup java -jar /var/lib/jenkins/workspace/Kojima_Studio_frontend/target/kojima-0.0.1-SNAPSHOT.jar > ./workspace/backendlog.txt &

				    '''
				}
			}
		}
   }
}

pipeline脚本需要根据个人需要进行路径的修改,修改完之后回到原来的项目处,在设置中的pipeline脚本处将脚本复制粘贴过去保存即可。

个人的一些理解

因为在此之前从来没用过集成工具,因此并不是很了解Jenkins的运行逻辑。一开始以为需要把代码上传到云服务器上,问了学长之后自己又进行了一些摸索,大概是明白了怎么回事。

Jenkins实际上是从git仓库处拉取代码,运行pipeline脚本进行打包和部署,打包操作生成的文件都是放在Jenkins的工作目录中的,以我个人的配置为例,如下图

这是我的Jenkins的工作目录,如果我们点开backend,可以看到有如下的结构

点开target目录,就能看到使用项目打包后的jar包,(pipeline脚本需要和项目的生成jar包名字事先协调一致)

因此只需要绑定好仓库,Jenkins将自动下载代码并帮忙运行部署,可以说是非常方便了。下面放一下之前部署的项目前端的成功截图


文章作者: Lhtian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lhtian !
  目录