jenkins实现gitlab自动部署

简介

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。

这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。

在DevOps流程中Jenkins充当CI/CD的角色,非常重要。

环境准备

  • 干净的CentOS 7.4及以上版本的虚拟机或服务器
  • XShell:连接虚拟机的工具

安装

Jenkins的安装有多种方式,这里介绍其中一种tomcat+war包的形式。

jenkins和tomcat都是java应用,因此我们一开始必须要先安装Java。

Java安装

下载:

如果没有wget命令,先安装wget

yum install -y wget

wget http://lib.paasdev.k2software.cn/k8s/tools/jdk/jdk-8u181-linux-x64.rpm

安装:

sudo rpm -ivh jdk-8u181-linux-x64.rpm

或者

sudo yum localinstall -y jdk-8u181-linux-x64.rpm

测试:

java -version


Tomcat安装

Jenkins是运行在tomcat中,因此还需要下载tomcat

wget http://lib.paasdev.k2software.cn/k8s/tools/tomcat/v8.0.53/apache-tomcat-8.0.53.tar.gz

解压

tar zxvf apache-tomcat-8.0.53.tar.gz -C /opt/

Jenkins安装

Java和tomcat都安装完成后,我们就可以开始安装Jenkins了。

wget http://lib.paasdev.k2software.cn/k8s/tools/jenkins/2.138.1/jenkins.war


将下载的war包复制到/opt/apache-tomcat-8.0.53/webapps/路径下

cp jenkins.war /opt/apache-tomcat-8.0.53/webapps/

这样就完成Jenkins的安装了。。

Tomcat服务配置

sudo vi /usr/lib/systemd/system/tomcat.service

按字母a进入插入模式,添加以下内容,注意tomcat的安装目录:

[Unit]

Description=Tomcat

After=network.target

[Service]

Type=forking

ExecStart=/opt/apache-tomcat-8.0.53/bin/catalina.sh start

ExecReload=/opt/apache-tomcat-8.0.53/bin/catalina.sh restart

ExecStop=/opt/apache-tomcat-8.0.53/bin/catalina.sh stop

[Install]

WantedBy=multi-user.target

填写完了,按ESC键,然后输入冒号:wq 保存并退出。

启动Tomcat

在启动之前,我们需要关闭防火墙等安全措施。

关闭防火墙

sudo systemctl stop firewalld

sudo systemctl disable firewalld

关闭selinux

临时关闭

setenforce 0

永久关闭

sudo vi /etc/selinux/config

修改SELINUX=enforcing为

SELINUX= disabled

启动tomcat

systemctl start tomcat

设置开机自启

systemctl enable tomcat

访问Jenkins

http://[ip]:8080/jenkins

Jenkins配置

Jenkins首次启动需要进行一些配置,管理员密码默认在这个文件,查看密码:

cat /root/.jenkins/secrets/initialAdminPassword

Jenkins基础实战

实战这里分享前端vue项目构建和后端maven项目构建。

在开始之前需要先在系统上安装git、maven和node工具。

其中git用于下载代码仓库中的项目源代码,maven和node用于项目构建。

安装git

yum install git -y

安装maven

下载:

wget http://lib.paasdev.k2software.cn/k8s/tools/maven/apache-maven-3.5.4-bin.tar.gz

解压:

tar zxvf apache-maven-3.5.4-bin.tar.gz -C /opt/

加入到系统执行路径:

ln -s /opt/apache-maven-3.5.4/bin/mvn /usr/bin/mvn

测试:

mvn -v

安装node

下载:

wget http://lib.paasdev.k2software.cn/k8s/tools/node/node-v8.12.0-linux-x64.tar.gz

解压:

tar zxvf node-v8.12.0-linux-x64.tar.gz -C /opt/

加入到系统执行路径:

ln -s /opt/node-v8.12.0-linux-x64/bin/node /usr/bin/node

ln -s /opt/node-v8.12.0-linux-x64/bin/npm /usr/bin/npm

测试:

node -v

npm -v

前端Node vue项目

创建源代码项目

安装vue

npm install -g @vue/cli

加入系统执行路径

ln -s /opt/node-v8.12.0-linux-x64/bin/vue /usr/bin/vue

创建demo项目

vue create jenkins-vue-demo

cd jenkins-vue-demo

配置git

git config --global user.name "卢浩元"

git config --global user.email "lucaslu@k2workflow.com.cn"

提交代码到gitlab仓库

git init

git add . --all

git commit -m "init"

git remote add origin http://git.paasdev.k2software.cn/demo/jenkins-vue-demo.git

git push -u origin master

创建Jenkins任务

点击左边导航的新建任务,输入任务名称,选择任务类型为构建一个自由风格的软件项目

点击确认,进入任务配置页面

配置页面,源码管理选择Git,Repository URL填写我们源码仓库的地址。

配置构建

选择shell执行,填写shell命令

构建成功后就会生成dist目录了

前端部署

安装nginx

yum install -y epel-release

yum install -y nginx

配置nginx

vi /etc/nginx/nginx.conf

输入字母a进入插入模式:

将第一行的user nginx;

改为

user root;

location / {

           root /root/luhy-vue-demo;

           index index.html;

        }

填写完了,按ESC键,然后输入冒号:wq 保存并退出。

启动nginx

systemctl start nginx

查看nginx运行状态

systemctl status nginx

修改jenkins配置

保持配置,点击立即构建

最后访问http://虚拟机IP 即可查看vue页面

后端Maven项目

创建项目

首先到Gitlab上创建后端项目,如:luhy-maven-demo

项目Visibility Level选择Public

创建完成后,访问:

https://start.spring.io/

Dependencies搜索Web,选择Web:

最后点击Generate Project进行下载。

修改项目文件

解压demo.zip

替换pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.exmaple</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		
		<dependency>    
			<groupId>javax.servlet</groupId>   
			<artifactId>javax.servlet-api</artifactId>   
			<version>3.1.0</version>   
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<build>
		<finalName>jason-maven-demo</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

然后下拉,找到<build>标签,修改finalName中间的值如下:

<build>
        <finalName>luhy-maven-demo</finalName>
 </build>

将luhy-maven-demo改为自己的项目名

再上传以下文件到src/main/java/com/example/demo/路径下面:

HelloController.java

package com.exmaple.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author jason
 * @date 2018/9/27
 * @desc
 */
@RestController
public class HelloController {

    @GetMapping(value = "/hello")
    public String sayHello() {
        return "Hello, World";
    }
}

SpringBootStartApplication.java

package com.exmaple.demo;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

import com.exmaple.demo.DemoApplication;

/**
 * @author jason
 * @date 2018/9/27
 * @desc
 */
public class SpringBootStartApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(DemoApplication.class);
    }
}

上传项目

最后重新将demo目录打包为demo.zip,并上传到虚拟机中。

这里推荐一个上传工具:

yum install lrzsz -y

安装完成后,执行:rz 命令

选择demo.zip

安装解压工具

yum install unzip -y

解压demo.zip

unzip demo.zip

进入到demo目录,提交代码到Gitlab的项目中

git init
git remote add origin http://git.paasdev.k2software.cn/demo/luhy-maven-demo.git
git add .
git commit -m "Initial commit"
git push -u origin master

创建Jenkins任务

构建添加执行shell,命令填写:

mvn clean package

cp target/luhy-maven-demo.war /opt/apache-tomcat-8.0.53/webapps/

访问项目

最后通过浏览器访问项目:

http://[虚拟机IP]:8080/[项目名称]

如:

http://10.6.17.151:8080/luhy-maven-demo

出现Hello,World则表示部署成功了。

Jenkins高级实战

自动构建部署

进行Jenkins右边导航系统管理——插件管理——可选插件

搜索gitlab

安装Gitlab Plugin插件,勾选重启Jenkins

进入项目设置,找到构建触发器,勾选Build when a change ....

生成Jenkins用户token

点击右上角的用户,进入设置:

添加Token,注意保存一下token。

Gitlab允许本地IP进行Webhook:

进入Admin area—>Setttings—>Outbound requests

勾选Allow request xxx

Gitlab WebHook设置

进入项目,找到Settings—>Integrations

URL填写:http://[jenkins用户]:[token]@[触发地址]

其中触发地址可通过Jenkins项目设置里面的构建触发器获取。

最后点击下方的添加,然后点击Test,选择最上面的Push Events

下载项目代码

git clone http://10.6.16.62/root/luhy-vue-demo.git

修改代码提交代码

git commit -am "hello,world"

git push

归档下载

Vue前端项目

进入Jenkins前端demo项目,点击编辑:

找到构建选项,在下面添加:

tar zcvf dist.tar.gz dist

然后点击构建后操作,选择归档成品:

用于存档的文件,输入:dist.tar.gz

如图:

Maven后端项目

Pipeline流水线

新建Jenkins任务,选择流水线Pipeline

Vue前端项目

前端项目流水线脚本:

node {

   stage('checkout') {

     git 'http://10.6.16.62/root/luhy-vue-demo.git'

   }

    

   stage('install') {

     sh 'npm install'

   }

    

   stage('build') {

     sh 'npm run build'

   }

    

   stage('deploy') {

     sh '''

        rm -rf /root/luhy-vue-demo

        cp -r dist /root/luhy-vue-demo

        '''

   }

    

    

   stage('archive') {

     sh 'tar zcvf dist.tar.gz dist'

     archiveArtifacts 'dist.tar.gz'

   }

}

Maven后端项目

node {

   stage('checkout') {

     git 'http://10.6.16.62/root/luhy-maven-demo.git'

   }

    

   stage('build') {

       sh 'mvn clean package'

   }

    

   stage('deploy') {

       sh 'cp target/luhy-maven-demo.war /opt/apache-tomcat-8.0.53/webapps/'

   }

    

   stage('archive') {

       archiveArtifacts 'target/luhy-maven-demo.war'

   }

}

Pipeline from SCM

将Pipeline脚本放到git仓库中,并命名为Jenkinsfile

将前后端Pipeline脚本的checkout步骤修改如下:

stage('checkout') {

     checkout scm

}

Blue Ocean新一代UI

系统管理——插件管理——可选插件

搜索Blue Ocean,进行安装

打开任意项目,点击打开Blue Ocean

猜你喜欢

转载自blog.csdn.net/oJinXuan1/article/details/82879597
今日推荐