sudo apt install apt-transport-http ca-certificates
查看Debian版本选择对应的镜像源
Debian版本介绍:
查看当前操作系统发行版的版本信息。这个命令可以清楚的知道是RedHat还是其他发行版,以及具体的版本号,比如3.4或者5.4等。
cat /etc/os-release
修改镜像文件
vi /etc/apt/sources.list
修改内容如下
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
Nginx默认会安装在etc目录下,查看Nginx配置文件内容
cat /etc/nginx/nginx.conf
我们看最后红框里的内容,意思就是使用/etc/nginx/conf.d/default.conf文件进行配置。
然后我们可以编辑 /etc/nginx/conf.d/default.conf 文件。
vi /etc/nginx/conf.d/default.conf
配置方法和前面的nginx配置一样,但是我们需要将必要的文件(静态文件、SSL证书)传递给Docker容器
创建目录存放资源
mkdir /data/cert
mkdir /data/www
退出docker容器,进入server界面
exit
查看所有容器信息,可以得到容器的id,如下图
docker ps -a
将资源文件传给服务端docker下的nginx容器
docker cp /data/cert 6ba3901beac9:/data/cert
储存容器
然后执行以下命令保存图像:
docker commit -m="备注" 你的CONTAINER_ID 你的IMAGE
请把-m后面的信息改成自己容器的信息
你完成了!
恭喜你完成了Docker教程,学习了Docker的一些基本操作
Centos下安装Jenkins
Jenkins是一个基于Java语言开发的持续构建工具平台,主要用于您的软件和项目的持续自动构建/测试。 它可以执行你预设的设置和构建脚本,也可以与Git代码库集成,实现构建的自动触发和定时触发。
这部分大部分内容是实现一套CI/CD流程【11】从0到1的掘金小册子,更详细的内容可以学习这本小册子
安装 OpenJDK
因为 Jenkins 是一个用 Java 编写的持续构建平台,所以安装 Java 是必不可少的。
这里,我们选择安装开源的openjdk。 这里我们可以直接使用yum包管理器安装openjdk。
yum install -y java
使用国内镜像加速Jenkins的安装
官方教程【12】安装速度太慢,所以我们选择国内镜像安装
以下是(2021/04)jenkins LTS版本:大家可以去清华大学镜像站[13]看看,替换成最新链接
下载 Jenkins 到 /data 目录
cd /data
wget http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.2-1.1.noarch.rpm
sudo yum install jenkins-2.277.2-1.1.noarch.rpm
启动詹金斯
Jenkins安装完成后,启动命令会注册到系统Service命令中。 所以我们可以直接使用系统服务命令启动Jenkins。
这里node定时任务,可以使用三个命令,分别对应start/restart/stop这三个命令。
这里,我们可以直接调用service jenkins start来启动Jenkins
service jenkins start
# service jenkins restart restart 重启 Jenkins
# service jenkins restart stop 停止 Jenkins
服务启动后,访问IP:8080。 如果能看到如下界面,说明正在启动。 Jenkins 的首次启动时间一般较长(取决于服务器性能)
初始化 Jenkins 配置以解锁 Jenkins
Jenkins启动完成后,会自动跳转到这个界面(下图二)。 这是Jenkins的解锁界面。 需要输入服务器保存的初始解锁密码,才能进行下一步操作。
Jenkins 启动后,会生成一个初始密码。 密码保存在服务器文件中,我们可以进入服务器查看密码内容,在Jenkins管理员密码输入框中填写密码:
cat /var/lib/jenkins/secrets/initialAdminPassword
单击继续按钮以解锁 Jenkins。
下载插件
解锁后,会来到插件下载页面。 这一步需要下载Jenkins的一些功能插件。
因为jenkins插件服务器在国外,速度不是很理想。 安装插件前我们需要更换清华大学的Jenkins插件源,所以先不要点击Install Plug-in。
更换方法非常简单。 进入服务器,将/var/lib/jenkins/updates/default.json中的插件源地址替换成清华源地址,google替换成baidu。
sed -i 's/http://updates.jenkins-ci.org/download/http://mirrors.tuna.tsinghua.edu.cn/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http://www.google.com/http://www.baidu.com/g' /var/lib/jenkins/updates/default.json
然后点击安装推荐的插件,稍等片刻插件安装完成
完成安装
插件安装完成后,下一步就是注册一个管理员账号。
按照提示一路配置,直到看到如下界面,即表示安装成功
测试安装
至此,我们的Jenkins就已经成功启动了。 然而,我们仍然需要在 Jenkins 上做一些简单的配置,然后它才能构建 docker 镜像。
我们点击Jenkins主页->左侧导航->新建任务->Freestyle项目(构建一个自由风格的软件项目)
新建完成后,找到构建项,选择添加构建步骤node定时任务,选择执行shell,输入以下命令
docker -v
docker pull node:latest
这个命令会拉取一个nodejs稳定版的镜像,我们可以测试Docker的可用性
保存后,我们点击左侧菜单中的Build Now,Jenkins就会开始构建。 选择左侧历史中的第一项(最新项),点击控制台输出,查看构建日志。
执行后发现没有访问权限。 什么情况?这里不得不提下Linux下的Unix Socket权限问题
在Linux中,Unix sockets属于root用户,所以需要root权限才能访问
但是在docker中,docker提供了一个用户组的概念。 我们可以将执行Shell的用户添加到名为docker的用户组中,就可以正常执行docker命令了。
而jenkins中执行的终端用户是jenkins,所以我们只需要将jenkins添加到docker用户组即可:
sudo groupadd docker #新增docker用户组
sudo gpasswd -a jenkins docker #将当前用户添加至docker用户组
newgrp docker #更新docker用户组
加入后重启Jenkins:
sudo service jenkins restart
重启 Jenkins 后,再次执行脚本。 此时执行成功:
回去看看docker镜像
docker images
你会发现多了一个docker的节点镜像,就是我们通过Jenkins自动安装的
输入这个 docker 镜像
docker run -it node /bin/bash
做一些配置(具体怎么做参考前面的说明)
npm config set registry http://registry.npm.taobao.org
npm get registry
# 可能提示已安装,就不用再安装了
npm install yarn -g
yarn config set registry http://registry.npm.taobao.org/
yarn config get registry
exit
使用 SSH 协议集成 Git 存储库源
这一步我们使用Jenkins集成外部Git仓库来拉取和构建真正的代码。 在这里,我们选择 Gitee(Github 太慢了)作为我们的代码源。 这里准备了一个UmiJS[14]工程来演示构建。
生成公钥和私钥
首先,让我们配置公钥和私钥。 这是 Jenkins 访问 Git 私有库的常用认证方式。 我们可以使用 ssh-keygen 命令生成公钥和私钥。 在本地机器上执行构建。 这里的邮箱可以换成你自己的邮箱:
ssh-keygen -t rsa -C "642178633@qq.com"
执行后会遇到第一步:输入保存密钥的文件。
这一步是询问你要把公钥文件和私钥文件放在哪里。 默认放在~/.ssh/id_rsa下,当然你也可以选择输入自己的路径。 一路回到车上。
完成后,你会得到两个文件。 id_rsa 和 id_rsa.pub 分别。
其中,id_rsa为私钥文件,id_rsa.pub为对应的公钥文件。
我们需要在Git端配置公钥,在Jenkins端使用私钥与Git进行身份验证。
在 Gitee 中配置公钥
在Gitee中,如果要配置公钥,有两种方式:仓库公钥和个人公钥。 其中,如果配置了仓库公钥,该公钥只能访问配置的仓库。 如果配置了个人公钥,则可以访问该账号下的所有私有仓库。
这里我们以配置个人公钥为例。首先打开右上角的设置,点击下面的设置=> SSH公钥
下面有个添加公钥,填写信息即可。
title是公钥的标题,这里可以自定义; 公钥是刚刚生成的 id_rsa.pub 文件。 使用cat命令查看文件内容,在输入框中填写内容并保存。然后到Jenkins端配置私钥
cat ~/.ssh/id_rsa.pub
在 Jenkins 中配置私钥
回到詹金斯。 在Jenkins中,私钥/密码等认证信息以证书的形式进行管理,因此可以全局使用。 我们可以在配置任务时添加自己的凭据。 点击项目的配置,然后找到源代码管理=> Git => Repositories
这里的Repository URL是我们的仓库地址,SSH地址格式是git@gitee.com:xxx/xxx.git。从仓库首页的clone/download => SSH可以看出
重点在 Credentials 项上,这里是我们选择身份验证凭据的地方。 我们可以点击右侧的Add => Jenkins 按钮来添加新的凭证认证信息。
点击之后会弹出一个弹窗,就是Jenkins添加凭证的弹窗。 在Type中选择SSH Username with private key项。 然后填写信息:
在命令行窗口,查看私钥文件内容,复制
cat ~/.ssh/id_rsa
点击添加按钮复制xxx私钥文件中的所有文件内容(包括开头的BEGIN OPENSSH PRIVATE KEY和结尾的END OPENSSH PRIVATE KEY)
然后单击添加按钮以保存凭据。
保存后,在 Credentials 下拉列表中选择您添加的凭据。
如果没有出现红色的无权限提示,则表示身份验证成功,可以正常访问。
如果出现如下问题,说明服务器没有安装Git
安装完成后,刷新界面就正常了
yum -y install git
建立形象
环境准备好后,我们就可以开始构建镜像了。 但是,在构建镜像之前,我们需要准备一个 DockerFile。 那么什么是 DockerFile?
编写 Dockerfile
什么是 Dockerfile
Dockerfile是Docker镜像的基本描述文件,描述了生成镜像所需的执行步骤。 我们也可以自定义一个 Dockerfile 来创建我们自己的镜像。
例如,以下步骤可以使用 Dockerfile 描述为:
基于nginx:1.15镜像为基础。
将本地html文件夹中的文件复制到镜像中的/etc/nginx/html文件夹中。
将本地conf文件夹中的文件复制到镜像中的/etc/nginx/文件夹中。
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html
写入后,如何生成镜像? 我们只需要使用 docker build 命令构建镜像即可:
docker build -t imagename:version .
-t:声明要打印一个镜像的Tag标签,后面跟着标签。
标签的格式为image name:version.:声明搜索dockerfile的路径..表示在当前路径下搜索。 默认文件名为 Dockerfile。
有关 DockerFile 语法的更多详细信息,您可以参见此处[15]
因为我们的镜像只包含一个nginx,所以dockerfile的内容比较简单。 我们只需要在代码的根目录新建一个名为Dockerfile的文件,输入以下内容,提交到代码仓库[16]。
vi Dockerfile
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html
git add ./Dockerfile
git commit -m "chore: add dockerfile"
git push
詹金斯端配置
代码源和DockerFile准备好后,在服务器的/data目录下新建jenkins-shll.sh脚本文件
touch /data/jenkins-shll.sh
vi /data/jenkins-shll.sh
并添加以下内容
#!/bin/sh -l
yarn
yarn run build
docker build -t jenkins-test .
这里的脚本很简单,主要功能就是安装依赖=>构建文件=>构建镜像。
#!/bin/sh -l 的作用是:
如果服务器中的shell命令可以执行,但是在jenkins中执行不了,那是因为jenkins没有加载服务器中的全局变量/etc/profile。
最后只需要配置在Jenkins端执行的Shell脚本即可。 找到项目的配置,然后找到build => Execute shell。 输入以下脚本:
sh /data/jenkins-shll.sh
手动执行任务
保存后,我们手动触发下一个任务的执行。当没有报错时,任务执行成功
回去看看docker
docker images
可以发现还有一个名为jenkins-test的docker镜像
自动化任务安装插件
安装Generic Webhook Trigger Plugin(系统管理-插件管理-可用插件-搜索Generic Webhook)
选择并单击不重启安装
如果可选插件列表为空,请单击高级选项卡,将升级站点的 URL 替换为:,然后单击提交并立即获取。
添加触发器
Generic Webhook Trigger Plugin插件非常强大,可以根据不同的触发参数触发不同的构建操作。 比如我把master分支的代码提交到远程仓库,就会进行代码部署。 我提交到远程仓库的是feature分支,执行单元测试,单元测试通过后合并到dev分支。
灵活性非常高,您可以定制和配置适合您公司的解决方案。 这里方便演示,我们不做任何条件判断,只要有推送就会触发。
在Task Configuration -> Trigger Build -> 勾选Generic Webhook Trigger并保存
Git 仓库配置钩子
这里以码云为例。 github的配置基本一样。 进入码云项目首页后,点击管理-webhooks-添加,会弹出这样的框。
上图中URL的格式为:@:port/generic-webhook-trigger/invoke
以下选项是当你在仓库中执行一些操作时触发钩子。 这里默认使用push。
进入jenkin的系统管理->管理用户界面,可以看到一个用户列表。 在此列表中查找用户 ID。
接下来点击工具图标进入详情界面,找到API Token->Add New Token->Generate->找一个你喜欢的地方,保存这个token
Jenkins IP地址和端口是你部署的jenkins服务器的ip地址,如果端口号没改就是8080。
密码是你登录jenkins的密码
点击提交完成配置,我们还需要测试一下钩子是否生效
点击测试,如果配置成功,在Jenkins的左栏你的构建执行状态会出现一个任务。
实现邮件提醒-todo批量删除构建历史
转到系统配置 – >脚本命令运行
输入脚本
# "test"是项目名称,100是指(0~·100)全删除,就是构建历史前面的ID
def jobName = "test"
def maxNumber = 100
Jenkins.instance.getItemByFullName(jobName).builds.findAll {it.number <= maxNumber}.each { it.delete() }
点击运行
终于
您在日常工作中还使用了哪些其他 Centos 配置? 欢迎在评论区留下你的看法!
觉得收获满满的朋友欢迎点赞关注一波!
参考
[1]
从原理到实战,吃透Nginx! :
[2]
NVM官网:#install–update-script
[3]
Node.js官网:
[4]
显示本地镜像列表:
[5]
删除一个或多个本地镜像:
[6]
容器的启动/关闭/重启:
[7]
删除一个或多个容器:
[8]
阿里云容器镜像服务:
[9]
Nginx 容器教程:
[10]
Debian镜像使用帮助:
[11]
实现一个从0到1的CI/CD流程:
[12]
官方教程:+Jenkins+on+Red+Hat+distributions#space-menu-link-content
[13]
清华镜像站:
[14]
乌米:
[15]
这里:
[16]
代码库: