Simon Shi的小站

人工智能,机器学习, 强化学习,大模型,自动驾驶

0%

Jenkins 使用

运行方式

1、Jenkins 安装docker,使用三方docker

  • 付费

2、jenkins安装docker客户端,

  • docker in docker,特权模式

3、直接使用宿主机的docker服务

  • 优点:方便,简单,直观

  • 确定:Jenkins可以全权管理所有的容器,包括自己,

docker如何运行:

  • docker-cli

  • docker.sock

  • docker-server

Jenkins挂载运行+docker

1
2
3
4
5
6
7
docker run \n 
-v /usr/bin/docker:/usr/bin/docker
    -v /var/run/docker.sock:/var/run/docker.sock
    -u root
    -d --name jenkins
    -p 8120:8080\
    jenkins/jenkins:jdk17

Demo1-Web自动化

基于docker的web部署

python + Git + Jenkins + Docker + Allure

pytest + selenium + Allure Web自动化测试

1
docker run --shm-size 2G ccr.ccs.tencentyun.com/beifang/ui_framework:v1 

生成报告(下载)

1、不知都 生成的结果在那

2、不知道 结果的权限?

docker –> host –> jenkins

A. Jenkins,挂载host目录

共享文件夹 777 jenkins_home/workspace

1
2
3
4
5
6
7
8
docker run \n 
-v /usr/bin/docker:/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock
-v ./jenkins_home:/var/jenins_home
-u root
-d --name jenkins
-p 8120:8080\
jenkins/jenkins:jdk17

B. 任务docker,挂在共享文件夹

1
2
3
4
mkdir -p allure_results && chown 777 allure_results

docker run -v /path/jenkins_home/workspace/$JOB_NAME/allure-results:/app/.allure_results \
--shm-size 2G image:v2

权限不足:

Demo2-前端部署

A.docker 容器部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '3'
services:
docker_jenkins:
user: root
restart: always
image: jenkins/jenkins:lts # 指定服务所使用的镜像
container_name: jenkins # 容器名称
ports: # 对外暴露的端口定义
- 8080:8080
- 50000:50000
volumes: # 卷挂载路径
- /root/jenkins/jenkins_home/:/var/jenkins_home #冒号前为刚刚创建的路径,这里要写绝对路径
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
docker_nginx:
restart: always
image: nginx
container_name: nginx
ports:
- 8090:80
- 80:80
- 433:433
volumes:
- /root/nginxcfg:/etc/nginx/conf.d #用我们创建的Nginx配置去替换容器中的默认配置,冒号前为我们创建的目录的路径
- /root/nginxcfg/logs:/var/log/nginx #nginx日志位置
- /root/xxx/xxx/xxx:/usr/share/nginx/html

nginx config

1
2
3
4
5
6
error_log  /var/log/nginx/error.log notice;
server{ # 简单的监听80端口,指定index位置
listen 80;
root /usr/share/nginx/html;
index index.html index.htm;
}

B. 配置

  1. 根据提示找到密码复制粘贴
    通过这个命令可以获取,/root/jenkins/jenkins_home为挂载目录
    cat /root/jenkins/jenkins_home/secrets/initialAdminPassword
  2. 安装推荐的插件
  3. 设置管理员账号

然后就可以愉快的使用Jenkins了

接着点击系统管理->插件管理,需要在Jenkins安装两个插件:

  1. 安装 Publish Over SSH 作用: 将构建后的编译产出发布到服务器
  2. 安装Generic Webhook Trigger Plugin作用:通用 Webhook 触发器构建

C. 新建一个Jenkins构建任务

  • 关联的git仓库有了推送事件之后触发的构建

  • 系统管理->全局工具配置,安装nodejs

  • 构建shell

  • node -v  #查看node,npm 版本
    npm -v 
    npm i  #npm安装项目所需依赖
    npm install hexo-cli -g  #npm安装hexo
    hexo clean  #hexo清除缓存文件和静态文件
    hexo g  #hexo生成静态文件
    tar -zcvf public.tar ./public  #压缩生成的静态文件目录
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    ### 发布

    ```shell
    cd /root/yarbei/apps #进入文件所在目录
    mv yarbeiweb yarbeiweb-$(date +%Y%m%d-%H%M) #将旧的文件夹更名备份
    tar zxvf public.tar #解压public.tar
    mv public yarbeiweb #将解压后的文件夹改名
    rm -rf public.tar #删除压缩包

实践 hexo 编译发布

hexo编译环境打包

1
2
3
4
5
6
7
8
9
10
/dataraid/apps/webs/DockerFile

FROM docker.gh-proxy.com/jenkins/jenkins:lts-jdk17
USER root
RUN apt-get update && \
curl -sL https://deb.nodesource.com/setup_18.x | bash - && \
apt-get install -y nodejs && \
npm install -g hexo-cli hexo-deployer-git

USER jenkins

打包

1
2
/dataraid/apps/webs/DockerFile
docker build -t jenkins-hexo:latest -f DockerFile .

启动Jenkins容器

1
2
3
4
5
6
7
8
docker run \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./jenkins_home:/var/jenins_home \
-u root \
-d --name jenkins \
-p 8120:8080 \
jenkins/jenkins:jdk17

启动Hexo 编译容器(本地测试)

1
2
3
4
5
docker run  \
-v /dataraid/apps/docker_runs/jenkins/jenkins_home/workspace/blogs:/workspace/blogs \
-w /workspace/blogs \
jenkins-hexo:latest \
/bin/sh -c "npm install && hexo clean && hexo generate "

Jenkins job配置

webhook 触发器

1 Jenkins安装General Web Hook插件

2、Jenkins job配置 trigger

3、Jenkins 系统配置白名单

4、gitea 工程,配置hook

1
http://ip:port/generic-webhook-trigger/invoke?token=blog_hexo_auto"

5、gitea 配置app.ini (同机器部署,网络不通)

1
2
[webhook]
ALLOWED_HOST_LIST = *

参考

Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台(持续集成部署Hexo博客Demo) - misakivv - 博客园

docker+Jenkins+nginx实现前端自动部署详细教程-腾讯云开发者社区-腾讯云

从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

自动化发布静态页面 - Mrterrific - 博客园

  • git pull -> push to Host-A…

Gitea+K8s-Jenkins-master-slave(webhook钩子)_gitea web钩子-CSDN博客

docker+nginx+jenkins将hexo博客部署至云服务器