gogs可以自动化部署吗_docker + Jenkins + gogs 自动化部署

本文介绍了如何在CentOS8系统上通过Docker安装Docker、Docker-Compose、Portainer、Redis、MySQL,并设置免密拉取代码,接着详细讲述了Jenkins的安装、配置,包括Publish Over SSH插件的安装与配置,以及Gogs webhook的设置,最终实现自动化部署流程。
摘要由CSDN通过智能技术生成

安装 docker

# 下载自动安装脚本

curl -fsSL get.docker.com -o get-docker.sh

# 执行脚本,并指定为阿里的镜像

sh get-docker.sh --mirror Aliyun

# 启动docker

systemctl start docker

# 设置仓库镜像地址,可以加速下载镜像

vi /etc/docker/daemon.json

# 写入内容

{

"registry-mirrors": [

"https://3laho3y3.mirror.aliyuncs.com"

]

}

# 重启docker

systemctl daemon-reload

systemctl restart docker

# 设置开机启动

systemctl enable docker

centos8 系统安装的时候可能会报错:

Error:

Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed

- cannot install the best candidate for the job

- package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.13-3.2.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.2-3.3.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.2-3.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.4-3.1.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.5-3.1.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.2.6-3.3.el7.x86_64 is filtered out by modular filtering

- package containerd.io-1.3.7-3.1.el7.x86_64 is filtered out by modular filtering

centos8默认使用podman代替docker,所以需要containerd.io,那我们就安装一下就好了。

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm

安装 docker-composer

# 下载

curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 国内加速地址

curl -L http://rancher-mirror.cnrancher.com/docker-compose/v1.27.4/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose

# 添加执行权限

chmod +x /usr/local/bin/docker-compose

安装 htop、nginx、unzip、git

yum install -y htop nginx unzip git

安装portainer,用于在线客户化管理docker

# 创建数据卷

docker volume create portainer_data

# 启动portainer容器

docker run -d -p 9999:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --name=portainer --restart=always portainer/portainer-ce

# 新建 /etc/nginx/conf.d/portainer.conf,写入

server {

listen 80;

server_name testportainer.xxx.com;

# 读取http头部的超时时间,单位秒,连接建立后,服务端接收http头部,规定时间内没收到,则超时,返回给客服端408(request time out)

client_header_timeout 600;

# 读取http body的超时时间,单位秒,连接建立后,服务端接收body,规定时间内没收到,则超时

client_body_timeout 600;

# 发送响应超时时间,单位秒,服务端向客户端发送数据包,规定时间内客户端没收到,则超时

send_timeout 600;

# 保持闲置连接的超时时间,单位秒,超过后服务器和浏览器都会关闭连接

keepalive_timeout 600;

# nginx服务器与被代理服务连接超时时间,代理超时

proxy_connect_timeout 600;

# nginx服务器发送数据给被代理服务器超时时间,单位秒,规定时间内nginx服务器没发送数据,则超时

proxy_send_timeout 600;

# nginx服务器接收被代理服务器数据超时时间,单位秒,规定时间内nginx服务器没收到数据,则超时

proxy_read_timeout 600;

location / {

proxy_pass http://127.0.0.1:9999;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_redirect default;

}

location /api/websocket/ {

proxy_pass http://127.0.0.1:9999/api/websocket/;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

proxy_http_version 1.1;

}

}

打开浏览器,进入127.0.0.1:9999 或者 testportainer.xxx.com 就可以进入portainer的管理界面了

使用docker运行redis

# 新建 /root/docker/redis/docker-compose.yml

version: "3"

services:

redis:

image: redis:5

container_name: my_redis

command: redis-server /usr/local/etc/redis/redis.conf

restart: always

ports:

- "6379:6379"

volumes:

- ./data:/data:cached

- ./redis.conf:/usr/local/etc/redis/redis.conf:cached

logging:

driver: "json-file"

options:

max-size: "500m"

# 运行

docker-compose up -d --build

使用docker运行mysql

# 新建 /root/docker/mysql/docker-compose.yml

version: "3"

services:

mysql:

image: mysql:8

container_name: mysql

command: mysqld --default-authentication-plugin=mysql_native_password

restart: always

ports:

- "3306:3306"

environment:

- MYSQL_ROOT_PASSWORD=mysql888

volumes:

- ./data:/var/lib/mysql:cached

- ./conf:/etc/mysql/conf.d:cached

security_opt:

- seccomp:unconfined

logging:

driver: "json-file"

options:

max-size: "500m"

# 运行

docker-compose up -d --build

# 设置允许远程访问

use mysql;

update user set host='%' where user ='root';

FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

生成ssh密钥,免密拉取代码

# 生成密钥

ssh-keygen -t rsa -C "source@xx.com"

# 将id_rsa.pub内容添加到代码服务器

cd ~/.ssh/

cat id_rsa.pub

使用docker安装Jenkins

# 新建 /root/docker/jenkins/docker-compose.yml

version: "3"

services:

jenkins:

image: jenkinsci/blueocean

container_name: jenkins

restart: always

ports:

- "49999:8080"

- "50000:50000"

environment:

JAVA_OPTS: "-Duser.timezone=Asia/Shanghai"

volumes:

- ./data:/var/jenkins_home:cached

logging:

driver: "json-file"

options:

max-size: "500m"

# 运行

docker-compose up -d --build

# 解决权限错误问题

chown -R 1000:1000 data

权限问题解决之后,Jenkins会自动运行,并打印出一串随机密码

密码

打开浏览器进入127.0.0.1:49999, 输入日志中的密码完成账号初始化

初始化账号

选择要安装的插件

选择要安装的插件

安装插件

进入插件管理

安装publish over ssh插件

安装publish over ssh插件

配置publish over ssh插件

配置publish over ssh插件

拉到最下面,新增服务器

新增服务器

配置 gogs webhook

过滤分支,只处理dev分支,

设置参数构建,区分测试和正式,这个参数后面的publish over ssh 插件要用

image.png

设置构建后操作

image.png

点击高级按钮,设置把branch参数传入

image.png

同样在ssh server选项中也点击高级,并设置label为test,表示如果构建的时候选择test,则会进入当前这个server,这样就可以针对不同的构建参数选择不同的主机进行相关操作。需要注意Exec command 的命令是到远程服务器上执行的,而不是Jenkins所在的机器。

配置完毕,开始构建测试吧

image.png

可以看到默认是构建test,这个参数就是我们刚刚配置的。

设置钩子,提交代码之后触发自动更新

image.png

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值