0
点赞
收藏
分享

微信扫一扫

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)

烟中雯城 2022-12-03 阅读 131


文章目录

  • ​​1. 安装 Jenkins (版本: 2.175)​​
  • ​​2. 插件安装​​
  • ​​3. 系统设置​​
  • ​​4. 全局工具配置​​
  • ​​5. 创建新任务​​
  • ​​6. 全局安全配置​​
  • ​​6.1 允许用户注册​​
  • ​​A. 附录 - 帮助命令​​
  • ​​B. 附录 - MySQL 安装(Docker 方式)​​
  • ​​C. 附录 - Jenkins 配置参数说明​​
  • ​​首次启动Jenkins加载很慢的解决办法​​

1. 安装 Jenkins (版本: 2.175)

# 下载 jenkins 镜像
docker pull jenkins/jenkins

# 查看镜像对应的 Jenkins 版本
docker image inspect jenkins/jenkins:latest | grep JENKINS_VERSION

# 启动 jenkins 容器实例
docker run -d -p 7050:8080 -p 50000:50000 -v jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins docker.io/jenkins/jenkins

# 查看容器实例是否启动成功
docker ps

# 进入 jenkins 容器
docker exec -it jenkins bash

# 获取 admin 账户的初始化密码(在容器内执行)
cat /var/jenkins_home/secrets/initialAdminPassword

# 浏览器端访问, 输入 admin 账户的初始化密码
http://119.29.XXX.XXX:7050/login?from=%2Fjenkins

# 输入密码后, 进入 [安装推荐的插件] & [选择插件来安装], 初学者建议[安装推荐的插件]

# 创建第一个管理员用户, 可跳过此步骤, 继续使用默认的admin账户

  • ​-d​​ 后台运行镜像
  • ​-p 7050:8080​​ 将镜像的8080端口映射到服务器的7050端口
  • ​-p 50000:50000​​ 将镜像的50000端口映射到服务器的50000端口
  • ​-v jenkins:/var/jenkins_home​​​ ​​/var/jenkins_home​​​目录为jenkins工作目录,将容器内的 /var/jenkins_home 目录挂载到宿主机上的 jenkins 目录下, jenkins 目录在宿主机上的实际目录为​​/var/lib/docker/volumes/jenkins​
  • ​-v /etc/localtime:/etc/localtime​​ 让容器使用和服务器同样的时间设置。
  • ​--name jenkins​​ 给容器起一个别名

 

2. 插件安装

# jenkins - 系统管理 - 插件管理 - 可选插件 - 勾选对应的复选框 - 点击左下角[直接安装]

# 在[新建任务]中找不到[构建一个 maven 项目]栏目
Maven Integration

# 将成功编译的War/Jar包部署到远程的应用服务器上
Deploy to container

# 在[系统管理-系统设置]中找不到配置SSH
Publish Over SSH

 

3. 系统设置

  • [系统管理] -> [系统设置]
  1. Jenkins Location
  2. 邮件通知[Jenkins自带的邮箱功能]
  3. Publish over SSH

Jenkins 容器内免密登录到 服务器B(192.168.170.1)

# 进入 Jenkins 容器内部
docker exec -it jenkins bash

# 生成密钥(在 Jenkins 容器内执行)
ssh-keygen -t rsa -P ''

# 复制生成的公钥(在 Jenkins 容器内执行)
cat ~/.ssh/id_rsa.pub

# 将上一步复制的公钥粘贴到 authorized_keys 文件中(在 B 服务器上执行)
vim ~/.ssh/authorized_keys

# 测试免密登录到服务器B, 登录账户 ubuntu(在 Jenkins 容器内执行)
ssh ubuntu@192.168.170.1

# 公共密钥(id_rsa.pub 文件内容)填充到一个远程机器上(10.XXX.XXX.XXX)的 authorized_keys 文件中
# sudo ssh-copy-id -i ~/.ssh/id_rsa.pub 10.XXX.XXX.XXX

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_Jenkins


 

4. 全局工具配置

  • [系统管理] -> [全局工具配置]

容器内部已经安装了的工具直接找到对应的安装路径填写即可, 未安装的工具填写工具名称并在​​自动安装复选框​​上勾选, 最后保存即可.

 

5. 创建新任务

  1. 创建任务

​以下子步骤 2-7 进入方法: [我的视图] -> [任务名称, eg: xn-sub-interface] -> [配置]​

  1. General
  2. Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_Jenkins_02

  3. > ​​项目 URL​​ 填写 ​​SSH 地址​​ 或 ​​http 地址​​均可
  4. 源码管理
  5. Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_mysql_03

​Responsitory URL​​​ 填写 ​​SSH 地址​​​ 或 ​​http 地址​​均可

3.1 添加凭证提供者

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_mysql_04


4. Build

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_mysql_05


5. Post Steps

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_docker_06


6. 构建设置

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_mysql_07


7. 构建后操作

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_Jenkins_08


8. 项目构建情况

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_docker_09


 

6. 全局安全配置

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_Jenkins_10

6.1 允许用户注册

Jenkins 搭建与 Maven 项目自动化部署(Docker & Git篇)_Jenkins_11

 

A. 附录 - 帮助命令

# 清理掉没有容器使用的挂载目录
docker volume prune

# 进入 Jenkins 容器内部
docker exec -it jenkins bash

# 打印 Jenkins 内部 JAVA_HOME 环境变量
echo $JAVA_HOME

# Jenkins 容器内部自动安装的 maven 的仓库路径, 项目中需要的jar包都会下载到此目录下
ls ~/.m2/repository/

 

B. 附录 - MySQL 安装(Docker 方式)

# vim docker-compose.yaml
version: '2'

services:
# MySQL 服务
com.answer.mysql:
container_name: mysql.aal
hostname: mysql
image: mysql
environment:
- HOSTNAME=mysql
- MYSQL_ROOT_PASSWORD=answer123456
working_dir: /home/answer
# MySQL 在容器启动时会自动执行 /usr/local/bin/docker-entrypoint.sh 该脚本, 并自动执行 /docker-entrypoint-initdb.d 目录下的脚本
# command: /bin/bash -c './script.sh;'
volumes:
- ./data/datadir:/usr/data
- ./data/conf:/etc/mysql
- ./auto-script/mysql:/docker-entrypoint-initdb.d
- ./data/mysql-files:/var/lib/mysql-files/
ports:
- 3301:3306
logging:
driver: "json-file"
options:
max-size: "200M"
max-file: "5"

​初始化脚本存放在 docker-compose.yaml 文件同级目录下的 auto-script/mysql/***.sql​

  1. 初始化MySQL用户脚本: init_account.sql
  2. 初始化项目表结构脚本: init_table.sql

启动 MySQL 容器实例: ​​docker-compose -f docker-compose.yaml up -d​

init_account.sql

use mysql;
create user 'answer'@'%' identified by 'answer123456';
grant all privileges on xsi.* to 'answer'@'%';
flush privileges;

init_table.sql

SET FOREIGN_KEY_CHECKS=0;
CREATE DATABASE IF NOT EXISTS xsi default charset utf8 COLLATE utf8_general_ci;
use xsi;

CREATE TABLE `tm_user` (
`id` bigint(18) NOT NULL AUTO_INCREMENT,
`name` varchar(25) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

 

C. 附录 - Jenkins 配置参数说明

############################################################
# 构建后操作 - Send build artifacts over SSH
############################################################
# 选个一个你在系统设置里配置的配置的名字. 如: SERVER_B
SSH Server Name

# 需要上传的文件(注意:相对于工作区的路径. 看后面的配置可以填写多个, 默认用,分隔). 如: target/***.jar
Transfer Set Source files

# 移除目录(只能指定Transfer Set Source files中的目录). 如: target
Remove prefix

# 远程目录, 默认会继承系统配置. 如: xn-sub-interface/
# 由于[系统设置 - Publish over SSH - Remote Directory] 设置了值 `/home/ubuntu`
# 所以最终的路径是 `/home/ubuntu/xn-sub-interface/`
Remote directory



############################################################
# 系统管理 - 系统设置 - Publish over SSH
############################################################
# 密码(key的密码,如果你设置了), 没设置填空即可
Passphrase

# ssh 证书私钥文件存放路径. 如: /var/jenkins_home/.ssh/id_rsa(Jenkins 容器内部)
Path to key

# ssh服务名称. 如: SERVER_B
SSH Servers - SSH Server Name

# 部署服务器地址. 如: 10.XXX.XXX.XXX
SSH Servers - HostName

# 部署服务器(B)的登录用户
SSH Servers - Username

# 部署服务器(B)的目录
SSH Servers - Remote Directory

 

首次启动Jenkins加载很慢的解决办法

出现这个情况时,是因为Jenkins的默认更新镜像用的国外的镜像,把更新镜像改成国内的即可。

vim $JENKINS_HOME/hudson.model.UpdateCenter.xml

# 将
<url>https://updates.jenkins.io/update-center.json</url>
# 修改成
<url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>

# 重启jenkins即可

# 由于docker容器内没有vim命令, 在宿主机映射目录下修改即可
sudo vim /var/lib/docker/volumes/jenkins/_data/hudson.model.UpdateCenter.xml


举报

相关推荐

0 条评论