文章目录

  • 一、Docker安装Jenkins
    • 1.查看Jenkins LTS 版本
    • 2.拉取jenkins镜像
    • 3.创建挂载数据卷
    • 4.配置并启动jenkins
    • 5.通过`IP:8600`启动jenkins并初始化
  • 二、Jenkins插件安装+流水线创建
    • 1.Jenkins安装插件
    • 2.设置系统配置+全局工具配置
    • 3.新建Pipeline流水线
  • 三、Jenkins自动化部署Docker+SpringCloud项目
    • 1.创建微服务项目,并推送到git上
    • 2.创建`Jenkinsfile`文件
    • 3.拉取代码
    • 4.maven打包编译成docker镜像
    • 5.上传镜像文件到镜像仓库
    • 6.拉取镜像并应用部署
    • 7.使用gitee的webhook功能
    • 8.安装ngrok内网穿透,映射本地jenkins端口
    • 9.gitee中设置webhook功能
    • 10.推送1.1.0版本,gitee的webhooks自动触发Jenkins自动部署
  • 四、使用jenkins加阿里云云效webhooks
    • 1.安装`Generic Webhook Trigger`
    • 2.用户管理里面添加`apiToken`
    • 3.流水线配置中添加Generic Webhook Trigger配置
    • 4.设置只针对项目的某个分支触发操作
    • 5.阿里云云效添加webHooks配置
    • 6.推送1.1.2版本到云效代码库,触发jenkins自动部署
    • 7.整个钉钉实现版本推送通知
  • 五、Jenkins自动化部署vue-element-admin项目
    • 1.安装nodejs插件
    • 2.全局工具配置
    • 3.新建流水线
    • 4.在vue-element-admin下面创建Jenkinsfile文件
    • 5.拉取代码
    • 6.使用nodejs打包部署vue-element-admin
    • 7.上传服务器并替换vue项目

一、Docker安装Jenkins

1.查看Jenkins LTS 版本

Jenkins官网:https://www.jenkins.io/zh/download/

2.拉取jenkins镜像

docker pull jenkins/jenkins:2.346.1

3.创建挂载数据卷

创建jenkins_home文件夹

赋予jenkins_home文件夹访问权限

chown -R 1000 /software/jenkins/jenkins_home/
chmod 777 jenkins_home

赋予 /var/run/docker.sock文件访问权限

chmod 777 /var/run/docker.sock

4.配置并启动jenkins

docker run -d -m 2g -p 8600:8080 -p 50000:50000 \--restart=always \-v /home/software/jenkins/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \--name jenkins \jenkins/jenkins:2.346.1
  • -d: 后台启动
  • -m: 设置内存大小(m-M,g-G)
  • -u: 使用管理员权限启动
  • --restar=always: 开机启动,失败也会一直重启
  • -p: 映射端口
  • -v: 挂载数据卷
    • /var/jenkins_home: jenkins挂载目录
    • /var/run/docker.sock: 外部docker挂载目录
    • /usr/bin/docker: 外部docker启动目录
  • --name: 容器名称

进入jenkens容器内部,查看docker是否挂载成功

docker exec -it jenkins /bin/bash
docker version

5.通过IP:8600启动jenkins并初始化

  • 初始密码在日志文件中可查看,保存密码的目录:/var/jenkins_home/secrets/initiaAdminPassword

二、Jenkins插件安装+流水线创建

1.Jenkins安装插件

点击 Manage Jenkins(系统管理) -> Manage Plugins(插件管理)

maven插件

Publish Over SSHSSH插件

安装完插件,重启Jenkins

2.设置系统配置+全局工具配置

下载maven3.8.6版本并上传到jenkins文件夹下

mkdir /software/jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation

修改maven3.8.6文件夹下面的conf文件夹下面的settings.xml,修改下载源

<!-- 阿里云镜像 -->
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>

给mvn命令添加权限

chmod a+x /software/jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.6/bin/mvn

系统管理 -> 全局工具配置 -> maven

系统管理 -> 系统配置 -> 环境变量

MAVEN_HOME
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.6PATH+EXTRA
$MAVEN_HOME/bin

系统管理 -> 系统配置 -> Publish over SSH

设置jenkins时区

  • 用户名称 -> 设置

3.新建Pipeline流水线

新增流水线

勾选参数化构建过程,添加字符参数和选项参数

  • 字符参数:设置分支参数

  • 选项参数:设置微服务项目名称

添加流水线使用Jenkinsfile文件配置

三、Jenkins自动化部署Docker+SpringCloud项目

1.创建微服务项目,并推送到git上

test-cloud|-test-common|-test-common-cloud|-test-common-mybatisplus|-test-common-redis|-test-common-spring|-test-common-swagger|-test-common-tool|-test-seata|-test-seata-account|-src|-Dockerfile|-pom.xml|-test-seata-order|-src|-Dockerfile|-pom.xml|-test-seata-storage|-src|-Dockerfile|-pom.xml|-pom.xml|-Jenkinsfile|-pom.xml

2.创建Jenkinsfile文件

node {def mvnHomestage('测试') {sh "echo 测试流水线Jenkinsfile文件"}
}

Jenkins的选择立即构建,查看构建结果

3.拉取代码

流水线项目 -> 流水线语法 -> checkout: Check out from version control -> 复制流水线脚本

编辑Jenkinsfile文件,添加拉取代码

node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}
}

4.maven打包编译成docker镜像

添加Dockerfile文件,在每个微服务中都需要添加

FROM openjdk:8-jdk-oraclelinux8
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

pom.xml文件中添加maven打包命令,在每个微服务中都需要添加

<!--指定打包版本-->
<version>1.0.0</version><build><finalName>test-seata-account</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><artifactId>maven-resources-plugin</artifactId><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.10</version><executions><execution><id>default</id><goals><!--如果package时不想用docker打包,就注释掉这个goal--><goal>build</goal><goal>push</goal></goals></execution></executions><configuration><repository>${project.build.finalName}</repository><tag>${project.version}</tag><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins></build>

编辑Jenkinsfile文件,添加maven打包

node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}stage('编译,打包微服务工程') {// 编译打包sh "mvn clean install"}
}

5.上传镜像文件到镜像仓库

添加全局docker凭证: 系统管理 -> Manage Credentials -> 全局 -> 添加凭证

流水线项目 -> 流水线语法 -> withCredentials: Bind credentials to variables -> 绑定新增(Username and password (separated))

编辑Jenkinsfile文件,添加上传镜像

def tag = "1.0.7"
def aliyun_url = "registry.cn-hangzhou.aliyuncs.com"
def aliyun_project = "testcloud1"
def storage = "test-seata-storage"
def order = "test-seata-order"
def account = "test-seata-account"
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}stage('编译,打包微服务工程') {// 编译打包sh "mvn clean install"}stage('上传镜像') {sh "docker version"// 定义镜像名称def storageName = "test-seata-storage:${tag}"def orderName = "test-seata-order:${tag}"def accountName = "test-seata-account:${tag}"withCredentials([usernamePassword(credentialsId: '034e0cb5-d092-4d59-a3d9-2df6b47cc47e', passwordVariable: 'password', usernameVariable: 'username')]) {// some blocksh "docker login --username=${username} --password=${password} ${aliyun_url}"sh "docker tag ${storageName} ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker tag ${orderName} ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker tag ${accountName} ${aliyun_url}/${aliyun_project}/${accountName}"sh "docker push ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker push ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker push ${aliyun_url}/${aliyun_project}/${accountName}"sh "echo 镜像上传成功"sh "docker rmi ${storageName}"sh "docker rmi ${orderName}"sh "docker rmi ${accountName}"sh "echo 删除原始镜像成功"}}
}

6.拉取镜像并应用部署

流水线项目 -> 流水线语法 -> sshPublisher: Send build artifacts over SSH -> 生成流水线脚本

编辑Jenkinsfile文件,添加应用部署

注意execCommand: "/software/project/deploy.sh $tag",后面的路径必须由单引号改为双引号,不然外部传参,无法传参

def tag = "1.0.7"
def aliyun_url = "registry.cn-hangzhou.aliyuncs.com"
def aliyun_project = "testcloud1"
def storage = "test-seata-storage"
def order = "test-seata-order"
def account = "test-seata-account"
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}stage('编译,打包微服务工程') {// 编译打包sh "mvn clean install"}stage('上传镜像') {sh "docker version"// 定义镜像名称def storageName = "test-seata-storage:${tag}"def orderName = "test-seata-order:${tag}"def accountName = "test-seata-account:${tag}"withCredentials([usernamePassword(credentialsId: '034e0cb5-d092-4d59-a3d9-2df6b47cc47e', passwordVariable: 'password', usernameVariable: 'username')]) {// some blocksh "docker login --username=${username} --password=${password} ${aliyun_url}"sh "docker tag ${storageName} ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker tag ${orderName} ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker tag ${accountName} ${aliyun_url}/${aliyun_project}/${accountName}"sh "docker push ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker push ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker push ${aliyun_url}/${aliyun_project}/${accountName}"sh "echo 镜像上传成功"sh "docker rmi ${storageName}"sh "docker rmi ${orderName}"sh "docker rmi ${accountName}"sh "echo 删除原始镜像成功"}}stage('拉取镜像并应用部署') {sh "echo 应用部署"sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/software/project/deploy.sh $tag", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}
}

在服务器的/software/project目录下面添加deploy.sh执行文件

#!/bin/bash
#接收外部参数,$1对应第一个参数,$2对应第二个参数,参数之间使用空格分割
tag=$1
aliyun_url='registry.cn-hangzhou.aliyuncs.com'
aliyun_project='testcloud1'
storage='test-seata-storage'
order='test-seata-order'
account='test-seata-account'storageName=${aliyun_url}/${aliyun_project}/${storage}:${tag}
orderName=${aliyun_url}/${aliyun_project}/${order}:${tag}
accountName=${aliyun_url}/${aliyun_project}/${account}:${tag}echo "${tag}" >> /software/project/log.txt
echo "storageName ${storageName}" >> /software/project/log.txt
echo "orderName ${orderName}" >> /software/project/log.txt
echo "accountName ${accountName}" >> /software/project/log.txt#删除镜像
storageImageId=`docker images -q --filter reference=${storageName}`
if [ "$storageImageId" != "" ]; then#删除镜像docker rmi -f $storageImageIdecho "成功删除storage镜像"
fi
orderImageId=`docker images -q --filter reference=${orderName}`
if [ "$orderImageId" != "" ]; then#删除镜像docker rmi -f $orderImageIdecho "成功删除order镜像"
fi
accountImageId=`docker images -q --filter reference=${accountName}`
if [ "$accountImageId" != "" ]; then#删除镜像docker rmi -f $accountImageIdecho "成功删除account镜像"
fi#登录docker
docker login --username=剑灵服务器3 --password=ling10jian1992 ${aliyun_url}# 拉取镜像
docker pull ${storageName}
docker pull ${orderName}
docker pull ${accountName}#查询容器是否存在,存在则删除
storageContainerId=`docker ps -aq --filter name=${storage}`
if [ "$storageContainerId" != "" ]; then#停掉容器docker stop $storageContainerId#删除容器docker rm $storageContainerIdecho "成功删除storage容器"
fi
orderContainerId=`docker ps -aq --filter name=${order}`
if [ "$orderContainerId" != "" ]; then#停掉容器docker stop $orderContainerId#删除容器docker rm $orderContainerIdecho "成功删除order容器"
fi
accountContainerId=`docker ps -aq --filter name=${account}`
if [ "$accountContainerId" != "" ]; then#停掉容器docker stop $accountContainerId#删除容器docker rm $accountContainerIdecho "成功删除account容器"
fi# 启动容器
docker run -d -p 8882:8882 -m 512m --name ${account} ${accountName}
docker run -d -p 8881:8881 -m 512m --name ${order} ${orderName}
docker run -d -p 8883:8883 -m 512m --name ${storage} ${storageName}

7.使用gitee的webhook功能

下载gitee插件,安装完成后重启Jenkins

8.安装ngrok内网穿透,映射本地jenkins端口

ngrok官网地址:https://ngrok.com/

注册账号并下载Linux版本

上传服务器,启用并映射IP:8600端口

  • 解压并设置全局运用
tar xvzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin

  • 设置登录权限token
ngrok config add-authtoken <token>

  • 运行ngrok,需要一直保持在线连接,二级域名才能有效
ngrok http 192.168.80.128:8600

9.gitee中设置webhook功能

10.推送1.1.0版本,gitee的webhooks自动触发Jenkins自动部署

四、使用jenkins加阿里云云效webhooks

1.安装Generic Webhook Trigger

2.用户管理里面添加apiToken

3.流水线配置中添加Generic Webhook Trigger配置

4.设置只针对项目的某个分支触发操作

  • Generic Webhook TriggerPost content parameters中添加参数
ref$.ref // 勾选JSONpath

  • Optional filter添加正则匹配
^refs/heads/(test|main)$$ref

5.阿里云云效添加webHooks配置

6.推送1.1.2版本到云效代码库,触发jenkins自动部署

7.整个钉钉实现版本推送通知

点击 Manage Jenkins(系统管理) -> Manage Plugins(插件管理) -> 可选插件(DingTalk)

在钉钉中创建钉钉群,并设置机器人

点击 Manage Jenkins(系统管理) -> Configure System(系统配置) -> 钉钉

在流水线中勾选钉钉,即可使用

五、Jenkins自动化部署vue-element-admin项目

1.安装nodejs插件

2.全局工具配置

下载nodejs16.15.1包并上传到jenkins_home文件夹下面

  • 下载地址:https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.gz

系统管理 -> 全局工具配置 -> NodeJs

3.新建流水线

4.在vue-element-admin下面创建Jenkinsfile文件

node {def mvnHomestage('测试vue') {}
}

5.拉取代码

流水线项目 -> 流水线语法 -> checkout: Check out from version control -> 复制流水线脚本

编辑Jenkinsfile文件,添加拉取代码

node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/test']], extensions: [], userRemoteConfigs: [[credentialsId: '2b610a7f-5a1a-4d0c-8f93-29aabe182c88', url: 'https://codeup.aliyun.com/6191d29d38b0ff04d2a421d4/huameng_safe_product/safe-product-web.git']]])}
}

6.使用nodejs打包部署vue-element-admin

流水线项目 -> 流水线语法 -> nodejs: Provide Node & npm bin/folder to PATH -> 复制流水线脚本

编辑Jenkinsfile文件,添加nodejs打包

node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/test']], extensions: [], userRemoteConfigs: [[credentialsId: '2b610a7f-5a1a-4d0c-8f93-29aabe182c88', url: 'https://codeup.aliyun.com/6191d29d38b0ff04d2a421d4/huameng_safe_product/safe-product-web.git']]])}stage('打包,部署vue项目') {nodejs('nodejs16') {sh "npm install"sh "npm run build:stage"}}
}

7.上传服务器并替换vue项目

流水线项目 -> 流水线语法 -> sshPublisher: Send build artifacts over SSH -> 生成流水线脚本

编辑Jenkinsfile文件,添加上传服务器

sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home/projects/server', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dist/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

Docker安装Jenkins相关推荐

  1. Docker系列 七. Docker 安装Jenkins

    Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...

  2. 在云服务器上基于docker安装jenkins

    jenkins是老牌的CI/CD工具.下面记录一下在云服务器上的安装过程. 基于docker安装jenkins 下面记录了如何在云服务器上安装jenkins. 新建一个jenkins_docker文件 ...

  3. Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】

    一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...

  4. docker安装jenkins并且通过jenkins部署项目(超详细and靠谱)

    一.简介: 本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目,最终效果是只要在jenkins对某个项目点击构建,jenkins就会去gitLab上拉取最新项目的最新代 ...

  5. docker 安装jenkins

    准备工作:docker 环境要装好,docker version 能显示出版本信息. Docker 安装: https://www.w3cschool.cn/docker/ubuntu-docker- ...

  6. CentOS中使用Docker安装Jenkins

    场景 CentOS7中Docker的安装与配置: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119028701 首先按照上面在 ...

  7. Jenkins : 构建伟大,无所不能 —— docker 安装Jenkins(最新版)

    Step 1:从dockerhub 拉取jenkins镜像 docker pull jenkins/jenkins:lts; Step 2:启动运行jenkins docker run -d --na ...

  8. 在centos7系统安装docker及用docker安装jenkins

    一.docker的安装 1.使用yum安装Docker sudo yum install docker 2.启动Docker service docker start 3.设置开机启动docker s ...

  9. docker 安装jenkins教程

    1.查看可用的 jenkins 版本 访问 jenkins 镜像库地址: https://hub.docker.com/_/jenkins?tab=tags . 可以通过 Sort by 查看其他版本 ...

最新文章

  1. 转型AI成功几率有几分?太真实了......
  2. oracle怎么查看一个表或一个索引占用多少空间
  3. DW里面html鼠标点击特效,dw制作鼠标经过时图像放大鼠标离开图像回原形效果
  4. java helloworld源代码_Java Hello World源代码剖析
  5. flv格式怎么转换成mp4
  6. java工程师容易秃头吗_当程序员会容易秃头?下面这3种职业一样会秃
  7. html插入页码,Word添加页码后,每一页的页码都一样怎么办?
  8. 【知识图谱】阿里巴巴电商知识图谱
  9. 社交产品盈利方式产品模式设计案例
  10. 服务器与客户端的TCP连接
  11. excel制作斜线表头
  12. 二十四节气-白露 | 白露至,秋实美
  13. JavaWeb学习——用户登录案例(13)
  14. [家里蹲大学数学杂志]第264期武汉大学2013年数学分析考研试题参考解答
  15. MATLAB处理.nii格式文件(.nii转换为.jpg格式)
  16. https://maven.google.com不能访问解决办法!
  17. CSDN学院免费课程领取教程
  18. 去除字符串中的空格(C语言)
  19. cloudreve旧版php下载,cloudreve
  20. DTCMS4.0建站流程

热门文章

  1. Linux——根文件系统的制作(jffs2 and ubifs)
  2. 谢尔盖·布林给Google Glass开发者的的一封信
  3. Win11无法删除文件夹怎么办?Win11无法删除文件夹的解决方法
  4. win10设置微信双开电脑登录多个微信,超级详细教程,小白也可轻松设置
  5. mongodb Linux C++开发环境调研
  6. Java 将图片组合成PDF文件
  7. 面试被问到为什么离职该怎么回答
  8. Python 3.10 尝鲜
  9. Java学习笔记2.5.3 循环结构 - 循环嵌套
  10. 嵌入式的可就业方向有哪些?