Jenkins持续集成

前面几篇文章介绍了关于Docker.Gitlab.Harbor等常用软件的安装,安装只是为了了解各个组件,现如今各大云厂商已经将这些工具封装,购买对应云服务后只需要点点点对应复制粘贴即可发布项目到对应服务器.但是使用之前还是需要学习工具的使用以便更好的了解编译发布的过程.

1.配置Jenkins

1.1登录并配置Jenkins.

#查看并输入密码以登录进行后续配置
cat /var/lib/jenkins/secrets/initialAdminPassword

1.2插件安装

这里由于插件很多是拉取国外镜像,所以会出现安装失败的情况,所以我们点击选择插件安装,后续安装需要的插件,并且只勾选languages中的简体中文语言包(部分汉化),然后等待安装完成.

1.3创建管理员用户

 1.4配置URL(根据需要配置即可,用作学习可直接保存)

 1.5开始界面

1.6 安装常用的插件(也可安装时直接安装推荐插件,可能会因为国外源的问题失败)

#选择Dashboard-Manage Jenkins-插件管理

Locale plugin

Git

Pipeline

Credentials Binding

Localization: Chinese(Simplified)

Publish Over SSH

1.7配置Java,Maven,Nodejs等环境

#jdk配置(测试项目jdk需要17,可安装多个版本,创建项目时指定jdk版本)

#maven

#nodejs配置

1.8gitlab/harbor证书配置

1.8.1gitlab证书配置

#gitlab机器上生成公钥和密钥(一直回车即可)

 # jenkins创建credentials证书,类型选择SSH Username with private key

 1.8.2harbor仓库配置

#类型选择password登录

2.实现流水线发布

这里我们开始发布项目,使用的工具有Jenkins、Harbor、Docker、Ansible

2.1发布Nodejs项目(这辣鸡人生一秒也不想待了:人生重开器)

2.1.1gitlab创建项目

2.1.2项目拉取到本地并创建流水线文件

#将项目克隆到本地,下载人生重开demo并解压到ty-nodejs中clear

git clone git@192.168.216.223:ty-devops/ty-nodejs.git

unzip master.zip -C ty-nodejs/

cd ty-nodejs/

mkdir /roles/projectname/tasks/

touch /roles/projectname/tasks/main.yml

touch Jenkins hosts site.yml

 2.1.3编辑Jenkinsfile.hosts.site.yml.main.yml

#Jenkinsfile(脚本式)

pipeline {
    agent any
	
	environment {
		serviceName = "lifeRestart"
		imageName = "harbor.tonystark.com/library/${env.JOB_NAME}:v${env.BUILD_NUMBER}"
		port = "8078"
	}
	
	tools {
		nodejs "nodejs"
	}
	
    stages {
		stage('Cleanup Workspace') {
			steps {
				sh "rm -rf * "
			}
		}
		
        stage('Preparation codes') {
            steps {
				git branch: 'main', credentialsId: 'f7034f86-8197-4787-a3d6-c12146e04908', url: 'git@192.168.216.223:ty-devops/ty-nodejs.git'
			}
        }

        stage('Build dockerimage') {
            steps {
				sh """
				sed -i 's#serviceName#${serviceName}#g' ${WORKSPACE}/Dockerfile
				echo `pwd`
				echo `env.JOB_NAME`
				ls
				"""
				script {
					def image = docker.build("${imageName}","--no-cache --rm -f ${WORKSPACE}/Dockerfile ${WORKSPACE}")
					docker.withRegistry('http://harbor.tonystark.com', '0391b630-336d-489c-a077-db2813e19b20') {
						image.push()
					}
				}
            }
        }
		stage('Build ansible-playbook') {
			steps {
				script {
					sh """
					rm -rf roles/${serviceName} # 清理release
					mv roles/projectname roles/${serviceName}
					sed -i 's/\\(projectname: \\).*/\\1${serviceName}/' site.yml 
					sed -i 's/\\(container: \\).*/\\1${env.JOB_NAME}/' site.yml 
					sed -i 's#\\(image: \\).*#\\1${imageName}#' site.yml 
					sed -i 's#\\(exposeport: \\).*#\\1${port}#' site.yml 
					echo 'Cleanup history docker image' && docker rmi ${imageName}
					"""
				}
			}
		}

        stage('Deploy To Remote Host') {
            steps {
				script {
					sh "ansible-playbook -i hosts site.yml"
				}
            }
        }
    }
}

#hosts

vim hosts

[lifeRestart]
192.168.216.224

#site.yml

---

- name: Deploy {{ projectname }} to remote hosts
  hosts: all
  vars:
    user: jenkins
    image: image
    exposeport: port
    container: container
    projectname: projectname
  remote_user: '{{ user }}'
  gather_facts: false
  roles:
    - '{{ projectname }}'

#main.yml

---
- name: pull an image
  docker_image:
    name: '{{ image }}'

- name: run a container
  docker_container:
    name: '{{ container }}'
    image: '{{ image }}'
    ports:
      - '{{ exposeport }}:8080'
    state: started
    restart: yes
    restart_policy: always

2.1.4推送到gitlab

git add -A

git commit -m 'xxx'

git push -u origin main

2.1.5创建pipeline流水线

2.1.6配置流水线

2.1.7测试发布

2.1.8测试nodejs项目是否发布成功

http://192.168.216.224:8078/public/index.html

2.2发布Java项目

2.2.1gitlab创建项目(参考2.1.1)并拉取到本地添加配置文件

https://codeload.github.com/spring-projects/spring-petclinic/zip/refs/heads/main

git clone git@192.168.216.223:ty-devops/ty-nodejs.git

unzip spring-petclinic-main.zip -C ty-java/

cd ty-java/

mkdir /roles/projectname/tasks/

touch /roles/projectname/tasks/main.yml

touch Jenkins hosts site.yml

2.2.2编辑Jenkinsfile.hosts.site.yml.main.yml

#Jenkinsfile(声明式)

node {
		def serviceName = "spring-petclinic"
		def port = "8077"
		def mvnHome
		
		stage('Tools') {
			mvnHome = tool 'M3'
		}
		
		stage('Cleanup Workspace') {
			sh "rm -rf * "
		}
		
		stage('Preparation codes') {
			git branch: 'main', credentialsId: 'f7034f86-8197-4787-a3d6-c12146e04908', url: 'git@192.168.216.223:ty-devops/ty-java.git'
		}
	
		stage('Maven Build') {
			sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore -B -f  complete/pom.xml clean package"
		}
		
		script {
			imageName = "harbor.tonystark.com/library/${env.JOB_NAME}:v${env.BUILD_NUMBER}"
			def image = docker.build("${imageName}","--no-cache --rm -f ${WORKSPACE}/Dockerfile ${WORKSPACE}")
			docker.withRegistry('https://harbor.tonystark.com', '0391b630-336d-489c-a077-db2813e19b20') {
				image.push()
			}
		}
		
		stage('Build Ansible job') {
			sh """
			rm -rf roles/${serviceName} # 清理release
			mv roles/projectname roles/${serviceName}
			sed -i 's/\\(projectname: \\).*/\\1${serviceName}/' site.yml
			sed -i 's/\\(container: \\).*/\\1${env.JOB_NAME}/' site.yml
			sed -i 's#\\(image: \\).*#\\1${imageName}#' site.yml
			sed -i 's#\\(exposeport: \\).*#\\1${port}#' site.yml
			echo 'Cleanup history docker image' && docker rmi ${imageName}
			"""
		}
		
		stage('Deploy') {
			sh "ansible-playbook -i hosts site.yml"
		}
  }

#hosts

同上配置文件就不再重复了

#site.yml

---

- name: Deploy {{ projectname }} to remote hosts
  hosts: all
  vars:
    user: jenkins
    image: image
    exposeport: port
    container: container
    projectname: projectname
  remote_user: '{{ user }}'
  gather_facts: false
  roles:
    - '{{ projectname }}'

#main.yml

---
- name: pull an image
  docker_image:
    name: '{{ image }}'

- name: run a container
  docker_container:
    name: '{{ container }}'
    image: '{{ image }}'
    ports:
      - '{{ exposeport }}:8080'
    state: started
    restart: yes
    restart_policy: always

2.2.3创建pipeline并配置流水线

#参考nodejs项目就不再赘述

2.2.4测试发布(第一次编译时间可能较长需要拉取较多jar包)

#后续将继续更新k8s相关内容

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值