CI/CD首次在Linux上使用

安装Jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install java-11-openjdk
sudo yum install jenkins
# 如果出现no packages
# 再输入第一句代码

如果是虚拟机安装阿里云CentOS镜像|下载种子里面安装Java环境可能会出现以下问题

输入java -version查询出来的版本号并非当前所安装的

# 1.查看当前jdk版本
java -version
# 2.查看当前安装jdk版本
rpm -qa|grep java
# 3.如果出现安装的版本在列表中
# 4.编辑这个配置文件
vi /etc/profile
# 5.在最后输入以下四句,JAVA_HOME根据自己jdk的文件目录来定义
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.16.0.8-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 6.刷新这个配置文件
source /etc/profile

如果虚拟机Linux以管理员身份安装的,还需要将其他用户改为管理员否则两边查询的Java版本可能不一致

vi /etc/sudoers
# 找到root这行然后添加用户
reboot
# 重启生效

启动Jenkins

service jenkins start

查看状态

service jenkins status

运行正常

如果遇到这种情况

这个报错信息百度很久也没解决

后面查看内存使用率才发现原来GitLab吃的内存太多

查看内存使用率

free -h

开启GitLab只剩下247M内存,关闭之后剩2.7G

然后重启Jenkins就可以正常打开了

输入以下命令即可将密码打印在控制台

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

安装DotNET6 SDK

安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

.NET SDK 使你可以通过 .NET 开发应用。 如果安装 .NET SDK,则无需安装相应的运行时。 若要安装 .NET SDK,请运行以下命令:

sudo yum install dotnet-sdk-6.0

安装docker(设置阿里yum源)

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

由于repo中默认只开启stable仓库,故这里安装的是最新稳定版

sudo yum install docker-ce

启动docker

sudo systemctl start docker
sudo systemctl status docker

安装Git

yum install -y git

Jenkins配置shell自动化部署

创建Jobs配置Git选择构建中的执行Shell

Jenkins下的项目目录/var/lib/jenkins/jobs

可以进入对应项目中的workspace进行编译,编译通过基本就没啥问题了

如果docker中就一个镜像可以这样写Jenkins中运行的shell命令

#!/bin/bash
# 输出一提示的话
echo "Successfully^_^ ......................................................................................"
# 输出当前地址,可以在日志中看到当前路径,检查一些路径问题
pwd
# 删除所有容器
docker rm -vf $(docker ps -aq)
# 删除所有镜像
docker rmi -f $(docker images -aq)
# 构建镜像命令
docker build -t dotnet6api .
# 从镜像运行容器
# --name dotnet6apiweb是容器名称
# dotnet6api是绑定的镜像名称
# 5000是对外暴露的端口
# 80是docker内部绑定的端口
# -e TZ=Asia/Shanghai是将容器内部时间设置为上海时间
docker run -e TZ=Asia/Shanghai -d -p 5000:80 --restart=always --name dotnet6apiweb dotnet6api

如果有很多镜像和容器只需要更新当前镜像和容器

#!/bin/bash
# 输出一提示的话
echo "Successfully^_^ ......................................................................................"
# 输出当前地址,可以在日志中看到当前路径,检查一些路径问题
pwd
# 构建镜像命令
docker build -t dotnet6api .
# 更新镜像
docker push dotnet6api
# 停止容器
docker stop dotnet6apiweb
# 删除容器
docker rm dotnet6apiweb
# 从镜像运行容器
# --name dotnet6apiweb是容器名称
# dotnet6api是绑定的镜像名称
# 5000是对外暴露的端口
# 80是docker内部绑定的端口
# -e TZ=Asia/Shanghai是将容器内部时间设置为上海时间
docker run -e TZ=Asia/Shanghai -d -p 5000:80 --restart=always --name dotnet6apiweb dotnet6api

首次Jenkins构建会报错,报错信息dial unix /var/run/docker.sock: connect: permission denied

# 添加当前用户到docker用户组  ${USER}指用户名
sudo gpasswd -a ${USER} docker
# 查看用户组下用户,检查添加是否成功
cat /etc/group | grep docker
# 重启docker服务
sudo service docker restart
# 切换当前会话到新组【group】或重启会话
newgrp - docker
# 更改文件权限
sudo chmod 666 /var/run/docker.sock

再次构建项目

输入IP加端口号项目运行正常

踩到一个小坑,因为日志用的是Log4net,而日志文件名叫Log4net.Config中间有大写

最后编译报错找不到log4net.config,后面把文件名改为小写即可通过了

DockerFile是通过VS自动生成的没有任何修改,将其移动到解决方案sln同级目录即可

docker基本命令

查看所有镜像

docker image ls

查看所有容器

docker ps -a

停止指定容器

docker stop 容器名

删除指定容器

docker rm 容器名

删除所有容器

docker rm -vf $(docker ps -aq)

删除指定镜像

docker rmi 镜像名

删除所有镜像

docker rmi -f $(docker images -aq)

停止Docker服务并查看运行状态

service docker stop
service docker status

扩展知识,发布项目想查看日志怎么办

进入容器dotnet6apiweb

docker exec -it dotnet6apiweb /bin/bash

容器里面相当于一个系统所以无法使用vim等操作

安装vim

apt-get install vim

出现错误

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package vim

以下命令貌似会把本地的源同步到docker容器中再安装就可以了

apt-get update
apt-get install vim

退出容器快捷键CTRL + P 然后 CTRL + Q


被这风吹散的人说Ta爱的不深,被这雨淋湿的人说Ta不会冷