锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

jenkins学习与实战

时间:2022-10-30 10:00:00 2218连接器

jenkins学习与实战

软件开发生命周期

软件开发的生命周期也被称为SDLC(Software Development Life Cycle),它集需求分析、设计、开发、测试和部署于一体。

软件生命周期又称软件生存周期或系统开发生命周期,是软件生产到报废生命周期、问题定义、可行性分析、总体描述、系统设计、编码、调试测试、验收运行、维护升级到废弃阶段,这是软件工程的思想原则,即循序渐进,为了提高软件的质量,每个阶段都要定义、工作、审查、形成文档进行交流或备查。然而,随着面向对象的新设计方法和技术的成熟,软件生命周期设计方法的指导意义逐渐降低。

生命周期的每个周期都有一定的任务,并生成一定规格的文档(数据),提交给下一个周期作为继续工作的依据。根据软件的生命周期,软件开发不再只强调编码软件工程要求每个周期工作的开始只能在前一个周期结果正确的前提下延续;因此,每个周期都是按照活动-结果-审核-再活动-直到结果正确的循环进行的。

大致分为以下阶段:

  • 需求分析

    这是生命周期的第一阶段。根据项目需要,团队实施可行性计划分析。项目需求可能由公司或客户提出。这一阶段主要是收集信息,也可能是改进和重建现有项目的新项目。这也是项目创建的目标。

  • 设计

    第二阶段是设计阶段、系统结构和满意度(即做什么、功能),并创建项目计划。该计划可以通过图表、布局设计或作者来呈现。

  • 实现

    第三阶段是实现阶段,项目经理为开发人员创建和分配工作,开发人员根据任务和设计阶段定义的目标开发代码。根据项目的大小和复杂性,完成需要几个月或更长时间。

  • 测试

    测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。 为了发现软件在整个设计过程中存在的问题发现软件在整个设计过程中存在的问题并加以纠正。

  • 运行及维护

    最后阶段是产品的不断进化、改进和维护阶段,根据用户的使用情况,可能需要修改某个功能,bug修复、功能增加等。

服务器规划

所有服务器都需要安装docker

主机名 主机IP 备注
jenkins-153 192.168.198.153 安装jenkins主节点
agent-154 192.168.198.154 安装jenkins工作节点
gitlab-152 192.168.198.152 安装gitlab
harbor-155 192.168.198.155 需提前安装harbor

jenkins安装

jenkins官网

https://www.jenkins.io/zh/

中文文档

https://www.jenkins.io/zh/doc/

window系统(不推荐)

自动部署

下载官网提供的msi文件即可

https://www.jenkins.io/download/thank-you-downloading-windows-installer-stable/

手动部署一
java -jar jenkins.war 
手动部署二
1.部署tomcat9  2.在官网下载jenkins.war http://mirrors.jenkins.io/war-stable/2.235.5/jenkins.war  3.将war包放入apache-tomcat-9.0.34\webapps\目录中  4.启动tomcat cmd cd apache-tomcat-9.0.34\bin\  执行 startup.bat 启动tomcat  5.访问jenkins http://localhost:8080/jenkins 

linux系统

直接安装jenkins(不推荐)
1.安装JDK8 yum install java-1.8.0-openjdk* -y  2.yum方式安装 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo  rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key  yum install jenkins  3.或者采用rpm方法安装:下载清华大学镜像源jenkins的rpm文件:jenkins-2.253-1.1.noarch.rpm https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/  上传centos安装服务器: rpm -ivh jenkins-2.190.3-1.1.noarch.rpm 

配置jenkins

1.修改Jenkins配置 vi /etc/syscofig/jenkins  修改内容如下: JENKINS_USER="root" JENKINS_PORT="8888"  2.启动Jenkins服务 systemctl start jenkins systemcl enable jenkins

3.打开浏览器访问
http://192.168.198.153:8888

获取密码

获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
容器化安装(推荐)
官方版

基础镜像最新版

docker pull jenkins/jenkins:2.347

docker pull jenkins/jenkins:2.347-alpine

运行镜像

给映射目录授权
mkdir -p /data/jenkins && chown -R 1000:1000 /data/jenkins

运行容器
docker run -itd --name jenkins -p 8080:8080 -p 50000:50000 -u root -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --restart=always -v /data/jenkins/:/var/jenkins_home/ jenkins/jenkins:2.347-alpine

查看容器启动日志并找到jenkins初始化密码
docker logs -f jenkins

浏览器测试

http://192.168.198.153:8080

中文版

中文社区

官网地址:
https://bintray.com/jenkins-zh/generic/jenkins

docker官网地址:
https://hub.docker.com/r/jenkinszh/jenkins-zh

github官网地址:
https://github.com/jenkins-zh/jenkins-formulas

基础镜像

最新版本:790MB
docker pull jenkinszh/jenkins-zh:2.267

推荐版本:618MB
docker pull jenkinszh/jenkins-zh:2.221

安装jenkins

给映射目录授权
mkdir -p /data/jenkins && chown -R 1000:1000 /data/jenkins

启动
docker run -itd --name jenkins -p 8080:8080 -p 50000:50000 -u root -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --restart=always -v /data/jenkins:/var/jenkins_home jenkinszh/jenkins-zh:2.267

查看容器启动日志并找到jenkins初始化密码
docker logs -f jenkins

浏览器测试

http://192.168.198.153:8080

制作jenkins镜像

由于jenkins默认插件下载地址都是国外,所以国内下载插件很困难,所以就需要手动制作jenkins镜像修改插件下载地址为中文社区的地址

制作步骤

制作步骤:
1.编写Dockerfile文件。
2.从下一步骤开始。所有文件都在jenkins中文社区寻找。但是不能在windows系统创建。因为系统文
件格式不同。jenkins启动时会报错。
3.创建init.groovy文件。
4.创建hudson.model.UpdateCenter.xml
5.创建mirror-adapter.crt
6.制作镜像
7.启动容器,试运行镜像
8.jenkins工作台操作,检验插件下载速度
9.停止容器
10.删除容器
备份镜像

基础镜像

docker pull jenkins/jenkins:2.221-alpine

配置文件准备

下载文件https://github.com/jenkins-zh/jenkins-formulas/tree/2.221

将init.groovy、hudson.model.UpdateCenter.xml、mirror-adapter.crt复制到/data目录下

Dockerfile

在基础镜像中增加时区修正。安装常用软件。更新jenkins插件为中文社区地址

FROM jenkins/jenkins:2.221-alpine
#自定义jenkins镜像
# 作者信息
MAINTAINER docker jenkins
# 修改源
USER root
RUN echo "https://mirrors.aliyun.com/alpine/v3.9/main/" > /etc/apk/repositories && \
echo "https://mirrors.aliyun.com/alpine/v3.9/community/" >> /etc/apk/repositories
# 安装需要的软件,解决时区问题
RUN apk --update add curl bash tzdata && \
	rm -rf /var/cache/apk/*
#修改镜像为东八区时间
ENV TZ Asia/Shanghai

ENV JENKINS_UC https://updates.jenkins-zh.cn
ENV JENKINS_UC_DOWNLOAD https://mirrors.tuna.tsinghua.edu.cn/jenkins

ENV JENKINS_OPTS="-Dhudson.model.UpdateCenter.updateCenterUrl=https://updates.jenkins-zh.cn/update-center.json"
ENV JENKINS_OPTS="-Djenkins.install.runSetupWizard=false"

COPY init.groovy /usr/share/jenkins/ref/init.groovy.d/init.groovy
COPY hudson.model.UpdateCenter.xml /usr/share/jenkins/ref/hudson.model.UpdateCenter.xml
COPY mirror-adapter.crt /usr/share/jenkins/ref/mirror-adapter.crt

制作镜像

docker build --rm -t edu/jenkins:2.221-alpine .

启动容器

创建映射目录
mkdir -p /data/jenkins && chown -R 1000:1000 /data/jenkins

运行容器
docker run -itd --name jenkins -p 8080:8080 -p 50000:50000 -u root -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --restart=always -v /data/jenkins/:/var/jenkins_home/ edu/jenkins:2.221-alpine

查看容器启动日志并找到jenkins初始化密码
docker logs -f jenkins

测试镜像并安装插件

http://192.168.198.153:8080

更换插件下载地址

如果插件无法安装就更新插件下载地址

清华大学:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

阿里云:https://mirrors.aliyun.com/jenkins/updates/update-center.json

华为云:https://mirrors.huaweicloud.com/jenkins/updates/update-center.json

更换步骤:
1.Manage Jenkins–>Manage Plugins->选择Advanced
2.Update Site处修改地址
3.点击submit
4.点击check now

删除镜像

停止容器
docker stop jenkins

删除容器
docker rm jenkins

备份镜像
docker save edu/jenkins:2.204.5-alpine -o edu.jenkins:2.204.5-alpine.tar

或者将镜像上传harbor私服

jenkins插件离线安装

清华大学镜像下载站:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/

jenkins节点安装

jenkins分布式

master节点负责调度任务,agent节点负责执行任务。

配置固定节点

jenkins工作台->系统管理->节点管理->新增从节点

agent节点安装软件

进入opt目录
cd /opt
JDK8
下载地址:
https://download.oracle.com/otn/java/jdk/8u331-b09/165374ff4ea84ef0bbd821706e29b123/jdk-8u331-linux-x64.tar.gz?AuthParam=1652254982_becfd6af2ef4d07b772255e25aeabcf1

tar -zxf jdk-8u331-linux-x64.tar.gz

mv jdk1.8.0_331 jdk1.8
maven3.6
下载地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tar -zxf apache-maven-3.6.3-bin.tar.gz

mv apache-maven-3.6.3 maven
git2.28
1.安装依赖环境:
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

2.删除yum方式安装的git:
添加依赖时自动yum安装了git1.8版本。需要先移除git1.8版本。
yum -y remove git

官网下载速度非常慢。国内加速地址大部分为windows版本。登录
https://github.com/git/git/releases查看git的最新版。不要下载带有-rc的,因为它代表了一个候选发布版本。
https://www.kernel.org/pub/software/scm/git/git-2.28.0.tar.gz

tar -zxvf git-2.28.0.tar.gz
cd git-2.28.0

配置git安装路径
./configure --prefix=/opt/git/

编译并且安装
make && make install

统一配置

vi /etc/profile

export PATH
export JAVA_HOME=/opt/jdk1.8
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export MAVEN_HOME=/opt/maven
export PATH=$MAVEN_HOME/bin:$PATH
export PATH=$PATH:/opt/git/bin

source /etc/profile

配置软连接

master节点ssh连接agent节点时需要/usr/bin/有java命令。配置java的软连接、同理配置maven、git的软连接。如果软件是yum安装的,则需要检查/usr/bin中是否有相关命令。如果没有,也需要做软连接。
ln -s /opt/jdk1.8/bin/java /usr/bin/
ln -s /opt/maven/bin/mvn /usr/bin/
ln -s /opt/git/bin/git /usr/bin

java方式连接agent

下载jar包

mkdir -p /data/workspaces
cd /data/workspaces

在google浏览器中复制jar地址
wget http://192.168.198.153:8080/jnlpJars/agent.jar

如果没有安装wget命令,选择yum方式安装:
yum install -y wget

启动连接

复制google浏览器中的启动命令:
java -jar agent.jar -jnlpUrl http://192.168.198.153:8080/computer/agent-154/slave-agent.jnlp -secret db7f1e3fc92b1d57af545cae7d836c110d3994f73b618abd94ab0d63c29cfe20 -workDir "/data/workspaces"

自由风格项目测试

配置好master和agent节点,创建一个自由风格项目,测试agent节点各种环境是否正常。
java -version
mvn -v
git version
docker version

jar包后台启动

vi jenkinsagentstart.sh

#!/bin/bash
nohup java -jar agent.jar -jnlpUrl http://192.168.198.153:8080/computer/agent-154/slave-agent.jnlp -secret db7f1e3fc92b1d57af545cae7d836c110d3994f73b618abd94ab0d63c29cfe20 -workDir "/data/workspaces" &

chmod +X jenkinsagentstart.sh

./jenkinsagentstart.sh

查看nohup启动日志:
tail -f nohup.out

SSH方式连接agent

免密配置

master节点要免密登录agent节点

生成秘钥
ssh-keygen -t rsa

按回车3次

复制公钥
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.198.154

免密登录测试
ssh 192.168.198.154

配置凭据

jenkins工作台->系统管理->凭据管理(manager credentials)

类型:SSH Username with private key

选择类型
SSH Username with private key

输入描述
agent-154-ssh

Username
root

Passphrase
123456

复制私钥到Private Key
cat /root/.ssh/id_rsa

添加agent节点

jenkins工作台->系统管理->节点管理->选择agent节点->新建从节点

Number of executors->5
远程工作目录->/data/workspaces
标签->agent-154
启动方式->Launch agentsvia SSH
主机->192.168.198.154
Credentials->root (agent-154-ssh)
Host Key Verification Strategy->Non verifying Verification Strategy
可用性->尽量保持代理在线

gitlab安装

直接安装

安装相关依赖

yum -y install policycoreutils openssh-server openssh-clients postfix

启动ssh服务&设置为开机启动

systemctl enable sshd && sudo systemctl start sshd

设置postfifix开机自启,并启动,postfifix支持gitlab发信功能

systemctl enable postfix && systemctl start postfix

下载gitlab包,并且安装

清华大学地址:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/

在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.7.6-ce.0.el6.x86_64.rpm --no-check-certificate

安装:
rpm -i gitlab-ce-12.7.6-ce.0.el6.x86_64.rpm

修改gitlab配置

修改gitlab访问地址和端口,默认为80,我们不进行修改。
external_url 'http://192.168.66.152'

重载配置及启动gitlab

gitlab-ctl reconfigure
gitlab-ctl restart

容器化安装

官网地址

https://hub.docker.com/r/gitlab/gitlab-ce

基础镜像

英文版
docker pull gitlab/gitlab-ce:12.7.6-ce.0

中文版
docker pull twang2218/gitlab-ce-zh:11.1.4

最新版:不是很稳定的版本
docker pull gitlab/gitlab-ce:13.3.2-ce.0

运行容器

运行镜像:运行时间比较长,大约需要3-10分钟。可以查看日志情况。
docker run -itd --name gitlab -p 443:443 -p 80:80 -p 222:22 --restart always -m 4GB -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab -e TZ=Asia/Shanghai gitlab/gitlab-ce:12.7.6-ce.0

配置gitlabe

vim /data/gitlab/config/gitlab.rb

配置项目访问地址:
external_url 'http://192.168.198.152'

配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.198.152'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 222

重启gitlab
docker restart gitlab

登录gitlab

http://192.168.198.152

登录gitlab:用户名默认为root。第一次登录需要设置密码。将密码设置为12345678

常用命令练习

进入容器,练习常用gitlab命令:
docker exec -it gitlab /bin/bash
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-ctl status

创建组

组分三类:
Private:私有的
Internal:内部的
Public:公共的

创建项目

项目分类:
根据组的分类进行分类。
创建项目注意事项:
不需要创建README,否则本地项目无法上传到gitlab服务器上。

创建用户

1.创建用户
用户权限分两种:
Regular:普通权限用户
Admin:具有管理员权限的用户

2.给用户分配密码

将用户加入群组

给群组中的用户分配权限分五种:
Guest:可以创建issue、发表评论、不能读写版本库。
Reporter:可以克隆代码,不能提交、QA、PM可以赋予这个权限。
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限。
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发人员可以赋予这个权限。
Owner:可以设置项目访问权限、-Visibility Level、删除项目、迁移项目、管理组成员、开发组组长可以赋予这个权限。

上传项目

使用idea开发工具演示
1.创建本地仓库
VCS->Enable Version Control Integration...

2.建立缓冲区
项目右键->git->Add

3.将代码提交到本地仓库
项目右键->git->Commit Directory

4.设置远程gitlab仓库地址
项目右键->git->Repository->Remote

5.将本地代码推送到远程gitlab仓库
项目右键->git->Repository->push

pipeline项目

Pipeline简介

概念

Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

使用Pipeline好处

来自翻译自官方文档:

代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。

持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。

可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。

多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。

可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。

创建 Jenkins Pipeline任务

  • Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
  • Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
  • Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfifile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfifile Pipeline 这种方法)。

安装git插件

jenkins工作台->系统管理->节点管理->可选插件->git

安装Pipeline插件

安装插件后,创建任务的时候多了“流水线”类型 。初始化jenkins环境时已经默认安装了pipeline插件。

jenkins工作台->系统管理->节点管理->可选插件->pipeline

Pipeline语法快速入门

Scripted脚本式-Pipeline

新建任务
pipeline-test02

选择模板
scripted pipeline

片段生成器中选择echo

node ('agent-154') {
	stage('Preparation') { // for display purposes
		echo 'hello pipeline'
	}
}

Declarative声明式-Pipeline

新建任务
pipeline-test02

选择模板
Hello world

agent配置

agent选项:
any : 在任何可用的机器上执行pipeline
none : 当在pipeline顶层使用none时,每个stage需要指定相应的agent

流水线语法

  • stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage
  • stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。
  • steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。
任务->流水线->点击链接 "流水线语法"

选择 Declarative Directive Generator

Directives->Sample Directive->选择agent:Agent选项
Agent选择 Label:Run on an agent matching a label

Label:输入agent节点标签内容。"agent-154"

点击Generator Declarative Directive按钮,复制生成内容替换任务的agent any部分
agent {
	label 'agent-154'
}

测试Declarative任务

点击 立即构建

升级案例

pipeline {
	agent {
		label 'agent-154'
	}
	stages {
        stage('检测环境') {
            steps {
                sh label: '', script: '''java -version
                mvn -v
                git version
                docker -v'''
            }
        }
        stage('拉取代码') {
            steps {
            	echo '拉取代码'
            }
        }
        stage('编译构建') {
            steps {
            	echo '编译构建'
            }
        }
        stage('项目部署') {
            steps {
            	echo '项目部署'
            }
        }
    }
}

Declarative pipeline和Scripted pipeline的比较

共同点

两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的steps,两者都可以利用共享库扩展。

区别

两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。

集成gitlab

http方式

gitlabe->clone->选择http方式
http://192.168.198.152/edu/jenkinsdemo.git

配置凭据

jenkins工作台->系统管理->凭据管理(manager credentials)
类型:Username with password

修改脚本

1.片段生成器中选择check out
2.修改pipeline-test03任务中的拉取代码阶段:
stage('拉取代码') {
    steps {
        echo 'gitlab拉取代码'
        checkout([$class: 'GitSCM', branches: [[name: '*/master']],doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],userRemoteConfigs: [[credentialsId: 'b26bd84e-e0cb-4b90-8469-1c2a46213466',url: 'http://192.168.198.152/edu/jenkinsdemo.git']]])
    }
}

测试任务

点击立即构建

ssh方式

免密配置

gitlabe-152节点免密登录配置。gitlab服务器保存公钥信息。方便访问gitlab-152服务器。

1.生成秘钥
ssh-keygen -t rsa

回车3次

2.查看公钥信息
cat /root/.ssh/id_rsa.pub

3.gitlabe服务器配置:
当前用户->setting->SSH Key->点击 add key按钮

配置凭据

1.jenkins工作台->凭据->系统->全局凭据 (unrestricted)->添加凭据

2.类型:SSH Username with private key

3.描述:gitlab-154-SSH

4.Username

5.Passphrase

6.Private Key
在gitlab服务器上查看私钥信息
cat /root/.ssh/id_rsa

修改脚本

1.片段生成器中选择check out
修改pipeline-test03任务中的拉取代码阶段:

stage('拉取代码') {
    steps {
        echo 'gitlab拉取代码'
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '7a17fa00-4158-4304-b4ea-721099383971', url: 'ssh://git@192.168.198.152:222/edu/jenkinsdemo1.git']]])
    }
}

测试任务

点击立即构建

Pipeline Script from SCM

刚才我们都是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,建议把Pipeline脚本放在项目中(一起进行版本控制)

agent节点配置maven

为pipeline项目增加maven打包jenkinsdemo项目配置信息

maven配置

/opt/maven/conf/settings.xml文件配置

1.配置仓库地址

创建本地仓库:
mkdir -p /data/maven/repository

设置本地仓库目录
vim /opt/maven/conf/settings.xml

<localRepository>/data/maven/repositorylocalRepository>

2.阿里云镜像仓库地址

<mirror>
    <id>nexus-aliyunid>
    <mirrorOf>*mirrorOf>
    <name>Nexus aliyunname>
    <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>

3.maven工程JDK8编译配置

<profile>
    <id>jdk-1.8id>
    <activation>
        <activeByDefault>trueactiveByDefault>
        <jdk>1.8jdk>
    activation>
    <properties>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
    properties>
profile>

Jenkinsfile文件

在jenkinsdemo项目根目录创建/Jenkinsfile文件。Jenkinsfile文件内容如下:

pipeline {
    agent {
    	label 'agent-154'
    }
    stages {
        stage('检测环境') {
            steps {
                sh label: '', script: '''java -version
                mvn -v
                git version
                docker -v'''
            }
        }
        stage('拉取代码') {
            steps {
                echo 'gitlab拉取代码'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '7a17fa00-4158-4304-b4ea-721099383971', url: 'ssh://git@192.168.198.152:222/edu/jenkinsdemo1.git']]])
            }
        }
        stage('编译构建') {
            steps {
            	echo 'mvn 编译构建'
            	sh label: '', script: 'mvn clean package'
            }
        }
        stage('项目部署') {
        	steps {
            	echo 'java项目部署'
            	sh label: '', script: 'java -jar target/jenkinsdemo.jar'
            }
        }
    }
}

提交项目到git

右击项目->git>commit->commit and push

修改pipeline项目

配置 SCM相关配置

测试pipeline项目

查看控制台输出信息

dockerfile-maven-plugin

简介

越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或者war即可直接发布了,启动之后是一个java进程;容器化之后,由源代码产出的是一个docker镜像,而启动的是一个容器。多了这么多步骤是为了容器化之后的运维便利性,从现在来看,容器化是势不可挡的趋势。为了实现的我们CI/CD的终极目标:一键发布,这里介绍一个mavenplugin(输入源代码,输出docker镜像)。

作为一个Docker项目,都绕不过Dockerfifile文件构建、打标签和发布等操作。如果能够将对Dockerfifile文件的这些操作包含进Maven的生命周期管理中,将极大简化Docker项目的构建发布过程。DockerfifileMaven是Spotify公司提供的一款Maven插件(还包含一个Maven扩展),用以辅助Docker项目(借助于Maven管理)进行Dockerfifile文件构建、标签和发布。

在实施CI/CD的过程中,实现一键发布用的最多的工具就是Jenkins了,在Jenkins上通过配置将每一个步骤串联起来,现在出现了pipeline让这个过程更简单了,一般的持续集成的流程是:

  1. 从代码仓库下载代码(git或者svn)

  2. 通过工具(maven或者gradle)编译出可执行程序包(jar或者war)

  3. 使用dockerfifile配置build出docker镜像

  4. 将docker镜像发布至镜像仓库

  5. 将镜像部署到云平台

  6. 多环境分发镜像

上述流程在工具齐全的情况下,是相当灵活好用的,公司一般都是这么使用的,而且也能将职责明确。但是当工具不够齐全的时候,或者说个人单打独斗的时候,会使用的工具有限,就寄希望于一个工具能够搞定更多的事情。dockerfifile-maven-plugin 就是这样一个maven工具的插件。

版本说明

docker-maven-plugin

插件名称:
docker-maven-plugin

github官网地址:
https://github.com/spotify/docker-maven-plugin

最新版本

<dependency>
    <groupId>com.spotifygroupId>
    <artifactId>docker-maven-pluginartifactId>
    <version>1.2.2version>
dependency>

dockerfile-maven-plugin

该插件需要Java 7或更高版本以及Apache Maven 3或更高版本。要运行集成测试或在开发中使用该插件,需要有一个能正常工作的Docker。Docker已经允许远程连接访问。dockerfile-maven-plugin要求用户必须提供Dockerfile用于构建镜像,从而将Docker镜像的构建依据统一到Dockerfile上,这与过时的docker-maven-plugin是不同的。

插件名称:
dockerfile-maven-plugin

github官网地址:
https://github.com/spotify/dockerfile-maven

最新版本

官网很久没有更新新版本
<dependency>
    <groupId>com.spotifygroupId>
    <artifactId>dockerfile-maven-pluginartifactId>
    <version>1.4.13version>
dependency>

docker-maven-plugin插件入门

简介

越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或者war即可直接发布了,启动之后是一个java进程;容器化之后,由源代码产出的是一个docker镜像,而启动的是一个容器。多了这么多步骤是为了容器化之后的运维便利性,从现在来看,容器化是势不可挡的趋势。为了实现的我们CI/CD的终极目标:一键发布,这里介绍一个mavenplugin(输入源代码,输出docker镜像)。

作为一个Docker项目,都绕不过Dockerfifile文件构建、打标签和发布等操作。如果能够将对Dockerfifile文件的这些操作包含进Maven的生命周期管理中,将极大简化Docker项目的构建发布过程。DockerfifileMaven是Spotify公司提供的一款Maven插件(还包含一个Maven扩展),用以辅助Docker项目(借助于Maven管理)进行Dockerfifile文件构建、标签和发布。

在实施CI/CD的过程中,实现一键发布用的最多的工具就是Jenkins了,在Jenkins上通过配置将每一个步骤串联起来,现在出现了pipeline让这个过程更简单了,一般的持续集成的流程是:

  1. 从代码仓库下载代码(git或者svn)

  2. 通过工具(maven或者gradle)编译出可执行程序包(jar或者war)

  3. 使用dockerfifile配置build出docker镜像

  4. 将docker镜像发布至镜像仓库

  5. 将镜像部署到云平台

  6. 多环境分发镜像

上述流程在工具齐全的情况下,是相当灵活好用的,公司一般都是这么使用的,而且也能将职责明确。但是当工具不够齐全的时候,或者说个人单打独斗的时候,会使用的工具有限,就寄希望于一个工具能够搞定更多的事情。dockerfifile-maven-plugin 就是这样一个maven工具的插件。

idea集成docker

idea安装docker插件。Dockerfifile、docker-compose.yml文件大部分内容会有提示信息。方便开发人员编写配置文件。

官网地址:
https://plugins.jetbrains.com/plugin/7724-docker/versions

agent-154配置

修改agent-154服务器docker.service服务信息,允许其他主机远程访问154服务器的docker。

vi /usr/lib/systemd/system/docker.service

在ExecStart行最后增加,开放远程主机访问权限。
-H tcp://0.0.0.0:2375

最后增加修改内容如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

重启docker
systemctl daemon-reload
systemctl restart docker

查看docker进程,发现docker守护进程在已经监听2375的tcp端口
ps -ef|grep docker

查看系统的网络端口,检查tcp的2375端口,docker的守护进程是否监听
netstat -tulp

配置idea

配置插件

settings->build execution...->docker->点击"+"按钮,新增agent-154服务器docker配置信息

配置内容如下:
name:agent-154
TCP Socket:
	Engine API URL:tcp://192.168.198.154:2375

配置成功后,会在下方显示connection successful

操作docker

配置成功后,会在idea开发工具下方窗口"8.services"里显示信息,右键点击connect。连接成功可以查看到container和images等信息。可以对container和images进行各种相关操作。

新建微服项目

新增jenkinsdemo1工程。

pom.xml文件
<build>
    <finalName>${project.artifactId}finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>
        <plugin>
            <groupId>com.spotifygroupId>
            <artifactId>docker-maven-pluginartifactId>
            <version>1.2.2version>
            <configuration>
                
                
                <imageName>${project.build.finalName}:${project.version}imageName>
                
                
                <dockerDirectory>${project.basedir}dockerDirectory>
                <dockerHost>http://192.168.198.154:2375dockerHost>
                    
                
                <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]entryPoint>
                
                
                <resources>
                	<resource>
                        <targetPath>/targetPath元器件数据手册IC替代型号,打造电子元器件IC百科大全!
          

相关文章