开发环境
名称 | 版本 |
---|---|
操作系统 | Windows 10 X64 |
VMware® Workstation 12 Pro | 12.0.0 build-2985596 |
CentOS7 | CentOS Linux release 7.8.2003 (Core) |
Linux | 3.10.0-1127.el7.x86_64 |
Docker | 20.10.3 |
Jenkins | 2.277.2 |
Linux 虚拟机 IP 地址:192.168.114.128
参考
超经典Jenkins持续集成实战教程全套完整版-从入门到精通基于—-Docker+Jenkins+Git 实现企业持续集成持续部署(CI/CD)(附配套资料)
基础知识
Docker 安装 Jenkins
1.启动 Docker systemctl start docker
2.Docker 安装 Jenkins docker pull jenkins/jenkins:lts
安装结果
[root@luoma ~]# docker pull jenkins/jenkins:lts
lts: Pulling from jenkins/jenkins
8bf9c589d5f9: Pull complete
55448245185e: Pull complete
d612b158a50b: Pull complete
81c43ecd1455: Pull complete
11f624f029b2: Pull complete
420490847adf: Pull complete
ab7db5c7d2ea: Pull complete
dcd476f2bb85: Pull complete
aabd5985178b: Pull complete
7cf8dd3cd486: Pull complete
8406d8ed75b7: Pull complete
0bbc8ff970c5: Pull complete
ab545a10ec8e: Pull complete
b699a1cf1f24: Pull complete
99671587bdd8: Pull complete
4437498ce877: Pull complete
Digest: sha256:cd9ea4c94adf795cd433109071cf3b177b357f8df4b69b8951e52d251af18749
Status: Downloaded newer image for jenkins/jenkins:lts
docker.io/jenkins/jenkins:lts
3.创建 Jenkins 文件夹 mkdir -p /mydata/jekins_home
4.文件夹授权 chown -R 1000 /mydata/jenkins_home/
5.启动 Jenkins
docker run -di --name=jenkins -p 8080:8080 -v /mydata/jenkins_home/:/var/jenkins_home jenkins/jenkins:lts
启动结果
[root@luoma ~]# docker run -di --name=jenkins -p 8080:8080 -v /mydata/jenkins_home/:/var/jenkins_home jenkins/jenkins:lts
4b4f416a057e95dc9c5aef8000d56f698276c53a8e6da63ec749fd044b109c82
6.访问 http://192.168.114.128:8080/
出现下面界面,启动成功,页面显示正在初始化
7.查看 Jenkins 版本
docker images
得到 Image ID d457516b229f
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins lts d457516b229f 13 days ago 571MB
查看容器详细信息 docker inspect d457516b229f
在结果中找到对应的信息 "JENKINS_VERSION=2.277.2"
Jenkins 配置
访问 http://192.168.114.128:8080/
出现下面界面,启动成功,页面显示正在初始化,这个操作是联网的,所以需要等待一段时间
解锁 Jenkins
等待一段时间后,出现下面的界面
根据页面提示,获取密码 cat /mydata/jenkins_home/secrets/initialAdminPassword
密码为:96dbbcbc4b9346b6999b77f44f07f493
继续
自定义 Jenkins 和安装插件
选择 安装推荐的插件
开始安装插件
如果安装失败,重试就行,实在不行就继续,因为插件可以后面再安装
创建账户,登录
到登录界面,填写用户名密码,使用admin账户继续
实例配置,这里使用默认的即可 http://192.168.114.128:8080/
保存并完成
开始使用Jenkins
插件安装
这里安装一个 SSH 插件,搜索 SSH
,直接安装
安装完成
配置 JDK 和 Maven
1.配置 JDK
输入别名,选择 JDK 版本(如果要配置多个,可以点击新增安装
继续安装 )
这里有一个警告,点击之后需要输入 Oracle 账号密码,点击
账号:2696671285@qq.com
密码:Oracle123
OK 之后,出现一个关闭按钮,关闭即可
2.配置 Maven
点击新增 Maven(可以配置多个)
JDK 和 Maven 都配置好之后,点击保存
添加凭据
配置 SSH
点击保存即可
Docker 测试项目
Docker 测试项目上传到 gitee
这里获得 Git 地址 https://gitee.com/luoma_haowei/jenkins-demo.git
创建运行脚本并授权
vi /usr/local/jenkins/jenkins.sh
内容如下
app_name='jenkinsdemo'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
#-d 后台运行容器,并返回容器 ID,也即启动守护式容器
#-i 以交互模式运行容器,通常与 -t 同时使用
#--name=”容器新名字” 为容器指定一个名称
#-p 指定端口映射,有以下四种格式 hostPort:containerPort
#镜像名称 wlf/${app_name}:1.0-SNAPSHOT
docker run -di --name=${app_name} -p 7070:8080 wlf/${app_name}:1.0-SNAPSHOT
echo '----start container----'
给 .sh 脚本添加可执行权限
chmod +x ./jenkins.sh
部署应用
1.修改 settings.xml
vi /mydata/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.6.2/conf/settings.xml
在标签 </mirrors>
上添加下面内容
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
2.在 Jenkins 中创建执行任务
设置任务名称后选择构建一个自由风格的软件项目
然后在源码管理中添加我们的git仓库地址:https://gitee.com/luoma_haowei/jenkins-demo.git
提示需要账号密码
已经可以正常连接 git 仓库了
之后我们需要添加一个构建,选择调用顶层 maven 目标,该构建主要用于把我们的源码打包成 Docker 镜像并上传到我们的 Docker 镜像仓库去
选择我们的 maven 版本,然后设置 maven 命令和指定 pom 文件位置
之后添加一个执行远程 shell 脚本的构建,用于在我们的镜像打包完成后执行启动 Docker 容器的 .sh 脚本
需要设置执行的 shell 命令如下:/usr/local/Jenkins/jenkins.sh
之后点击保存操作,我们的任务就创建完成了,在任务列表中我们可以点击运行来执行该任务
3.执行任务
在任务列表中我们可以点击运行来执行该任务
以通过控制台输出来查看整个任务的执行过程
运行结果
控制台输出
Started by user admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/jenkins-test
The recommended git tool is: NONE
using credential gitee
> git rev-parse --resolve-git-dir /var/jenkins_home/workspace/jenkins-test/.git # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://gitee.com/luoma_haowei/jenkins-demo.git # timeout=10
Fetching upstream changes from https://gitee.com/luoma_haowei/jenkins-demo.git
> git --version # timeout=10
> git --version # 'git version 2.20.1'
using GIT_ASKPASS to set credentials gitee 账号密码
> git fetch --tags --force --progress -- https://gitee.com/luoma_haowei/jenkins-demo.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision d9ab764fe82bb8cd118095c6d391563eb48b0f33 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f d9ab764fe82bb8cd118095c6d391563eb48b0f33 # timeout=10
Commit message: "update pom.xml."
> git rev-list --no-walk d9ab764fe82bb8cd118095c6d391563eb48b0f33 # timeout=10
[jenkins-test] $ /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.6.2/bin/mvn -f pom.xml clean package
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'mirror' (position: START_TAG seen ...</servers>\n\n\t<mirror>... @135:10) @ /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.6.2/conf/settings.xml, line 135, column 10
[WARNING]
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.jenkins.demo:jenkinsdemo >--------------------
[INFO] Building jenkinsdemo 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ jenkinsdemo ---
[INFO] Deleting /var/jenkins_home/workspace/jenkins-test/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jenkinsdemo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/jenkins_home/workspace/jenkins-test/src/main/resources
[INFO] skip non existing resourceDirectory /var/jenkins_home/workspace/jenkins-test/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ jenkinsdemo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /var/jenkins_home/workspace/jenkins-test/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jenkinsdemo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/jenkins_home/workspace/jenkins-test/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ jenkinsdemo ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ jenkinsdemo ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ jenkinsdemo ---
[INFO] Building jar: /var/jenkins_home/workspace/jenkins-test/target/jenkinsdemo-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.6.RELEASE:repackage (default) @ jenkinsdemo ---
[INFO]
[INFO] --- docker-maven-plugin:1.1.0:build (build-image) @ jenkinsdemo ---
[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying /var/jenkins_home/workspace/jenkins-test/target/jenkinsdemo-1.0-SNAPSHOT.jar -> /var/jenkins_home/workspace/jenkins-test/target/docker/jenkinsdemo-1.0-SNAPSHOT.jar
[INFO] Building image wlf/jenkinsdemo:1.0-SNAPSHOT
Step 1/3 : FROM java:8
---> d23bdf5b1b1b
Step 2/3 : ADD /jenkinsdemo-1.0-SNAPSHOT.jar //
---> 0d1eef4e485d
Step 3/3 : ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod","/jenkinsdemo-1.0-SNAPSHOT.jar"]
---> Running in eca203ba1fbc
Removing intermediate container eca203ba1fbc
---> dbcbd18d8b6a
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built dbcbd18d8b6a
Successfully tagged wlf/jenkinsdemo:1.0-SNAPSHOT
[INFO] Built wlf/jenkinsdemo:1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 36.306 s
[INFO] Finished at: 2021-04-24T06:47:25Z
[INFO] ------------------------------------------------------------------------
[SSH] script:
/usr/local/jenkins/jenkins.sh
[SSH] executing...
jenkinsdemo
----stop container----
jenkinsdemo
----rm container----
054cbc95057b4cde9cf0ddcc6b6d8646d93357de7d5f16387db5902aff9ecefe
----start container----
[SSH] completed
[SSH] exit-status: 0
Finished: SUCCESS
4.测试
运行成功,先查看 Docker 镜像状态 docker ps -a
浏览器访问 http://192.168.114.128:7070/jenkins