开发环境
| 名称 | 版本 |
|---|---|
| 操作系统 | 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:ltslts: Pulling from jenkins/jenkins8bf9c589d5f9: Pull complete55448245185e: Pull completed612b158a50b: Pull complete81c43ecd1455: Pull complete11f624f029b2: Pull complete420490847adf: Pull completeab7db5c7d2ea: Pull completedcd476f2bb85: Pull completeaabd5985178b: Pull complete7cf8dd3cd486: Pull complete8406d8ed75b7: Pull complete0bbc8ff970c5: Pull completeab545a10ec8e: Pull completeb699a1cf1f24: Pull complete99671587bdd8: Pull complete4437498ce877: Pull completeDigest: sha256:cd9ea4c94adf795cd433109071cf3b177b357f8df4b69b8951e52d251af18749Status: Downloaded newer image for jenkins/jenkins:ltsdocker.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:lts4b4f416a057e95dc9c5aef8000d56f698276c53a8e6da63ec749fd044b109c82
6.访问 http://192.168.114.128:8080/
出现下面界面,启动成功,页面显示正在初始化
7.查看 Jenkins 版本
docker images
得到 Image ID d457516b229f
REPOSITORY TAG IMAGE ID CREATED SIZEjenkins/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-SNAPSHOTdocker run -di --name=${app_name} -p 7070:8080 wlf/${app_name}:1.0-SNAPSHOTecho '----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 adminRunning as SYSTEMBuilding in workspace /var/jenkins_home/workspace/jenkins-testThe recommended git tool is: NONEusing credential gitee> git rev-parse --resolve-git-dir /var/jenkins_home/workspace/jenkins-test/.git # timeout=10Fetching changes from the remote Git repository> git config remote.origin.url https://gitee.com/luoma_haowei/jenkins-demo.git # timeout=10Fetching 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=10Checking out Revision d9ab764fe82bb8cd118095c6d391563eb48b0f33 (refs/remotes/origin/master)> git config core.sparsecheckout # timeout=10> git checkout -f d9ab764fe82bb8cd118095c6d391563eb48b0f33 # timeout=10Commit 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-SNAPSHOTStep 1/3 : FROM java:8---> d23bdf5b1b1bStep 2/3 : ADD /jenkinsdemo-1.0-SNAPSHOT.jar //---> 0d1eef4e485dStep 3/3 : ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod","/jenkinsdemo-1.0-SNAPSHOT.jar"]---> Running in eca203ba1fbcRemoving intermediate container eca203ba1fbc---> dbcbd18d8b6aProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}Successfully built dbcbd18d8b6aSuccessfully 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: 0Finished: SUCCESS
4.测试
运行成功,先查看 Docker 镜像状态 docker ps -a
浏览器访问 http://192.168.114.128:7070/jenkins