1.在centos7下安装docker,通过yum来安装docker,执行如下命令
# yum install docker --安装docker,最好不要安装最新版本的Docker,最新版本的docker不稳定可能存在bug
# systemctl start docker --启动docker服务
# systemctl enable docker --设置开机启动docker,防止机器关机后,docker服务需要手动启动
2.安装完docker后,接下来安装jdk(因为jenkins是java开发的)以及从网络下载jenkins安装包,注意 /data/software为我的系统保存jenkins包的路径,用户可以自行设置,注意jenkins的rpm包地址可能失效,失效的话,请登录jenkins官网进行下载,如果嫌网络下载速度慢,可以将离线下载的包,通过sftp工具拷贝到主机上进行安装
# yum install java 或者 # yum install java-1.8.0-openjdk
wget -P /data/software https://prodjenkinsreleases.blob.core.windows.net/redhat-stable/jenkins-2.138.3-1.1.noarch.rpm
3.转到/data/software 下,安装jenkins包
# cd /data/software
# rpm -ivh jenkins-2.138.3-1.1.noarch.rpm
4.启动jenkins服务,并通过 http://localhost:8080 访问启动的jenkins(默认jenkins管理页面是ip:8080)
# systemctl start jenkins //启动jenkins服务
# systemctl enable jenkins //开机启动jenkins服务
5.不出意外将通过地址能够访问jenkins,但是也不排除无法访问jenkins,因为centos7默认防火墙是开启,导致无法通过浏览器访问jenkins,我们可以通过在执行下面的命令,关闭系统的防火墙
# systemctl stop firewalld.service --关闭防火墙服务
# systemctl disable firewalld.service --取消开机启动防火墙服务
6.解决无法访问的问题后,通过地址访问到如下的页面
7.在centos7中执行下面的命令得到初始密码,进行登录操作
# vi /var/lib/jenkins/secrets/initialAdminPassword
8.输出密码后,进入如下界面,选择安装推荐插件
9.安装完推荐的插件后,进入创建管理员用户
10.设置完所有的步骤后,终于进入jenkins的管理界面,如下图
11.jenkins安装成功后,下面将继续介绍使用jenkins自动构建自己github上dotnet core程序
12.在jenkins主界面选择创建新任务,如下图
12.输入任务名称和选择构建咋样的风格的任务,选择完毕后,确定保存
13.确定后,进入任务配置页面,在general页面填写任务说明与描述,以及设置其他参数信息
14.填写general页面,进行源码管理,在这里我选择github,用户可以选择其他代码管理方式
15.进入centos7中执行命令,安装git
16.安装完成git后,再次查看之前报错的页面,错误消失了
17.因为在general页面配置了参数,我们将在源码管理页面使用,如下图所示
18.构建触发器页面,我这里不进行任何设置,用户可以凭借自己的需求自行设置
19.构建环境页面,因为想在构建环境页面,能够设置Version Number 的信息,在jenkins的系统设置中,插件管理安装Version Number 插件如下图,安装完成后,就可以在构建环境页面通过Version Number Plug插件生成优雅的版本号
20.构建页面,这里选择“执行shell”,填写shll脚本(这里最好将shell脚本命令写到文件中,以便后续的修改),在这里使用shell脚本,有利于后面的维护操作,不出问题,项目将构建成功
21.保存后,构建任务,发生错误(在jenkins任务控制台输出页面),输出如下图,执行 dotnet restore 命令失败,主要是系统中没有安装dotnet环境
22.在centos7中安装dotnet core运行环境
# rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm --在安装Net之前,我们需要安装微软key以及依赖,这个命令每台机器只要执行一次就行,安装dotnet sdk时,根据项目的版本选择特定的sdk进行安装
# yum install libunwind libicu --dotnet-sdk需要依赖“libunwind”和“libicu”
# yum install dotnet-sdk-2.0.0 --安装dotnet-sdk 版本2.0.0
23.在执行构建的过程中出现了“sudo: no tty present and no askpass program specified”的错误,原因在于在shell脚本中,使用sudo命令来提升执行权限,因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常,以下为解决方式
在Jenkins宿主服务器上运行如下命令
# sudo visudo
在文件的末尾加上一行
jenkins ALL=(ALL) NOPASSWD: ALL
重启Jenkins服务
# systemctl restart jenkins
最后,重新执行构建任务,不会出现先前的错误。
如果误操作修改了/etc/sudoers的权限来修改上述文件,则会导致如下所示的错误:
sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin
这是Linux的一种保护机制。因此,如果出现上述误操作,则需要执行如下命令来解决:
# pkexec chmod 0440 /etc/sudoers
24.在构建过程中,出现错误 shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory,具体的解决方案可以参考如下文章
执行脚本提示shell-init: error retrieving current directory:getcwd问题分析_juyin2015的博客-CSDN博客_shell-init
25.在执行shell脚本的过程,执行镜像启动的过程,容器启动后马上就关闭了,可以参考下面的文章
26.下面是shell文件的具体内容,供大家参考
27.下面是Dockerfile文件的内容,供大家参考
28.使用docker exec 命令出现如下的错误
rpc error: code = 2 desc = oci runtime error: exec failed:
container_linux.go:247: starting container process caused "process_linux.go:110:
decoding init error from pipe caused \"read parent: connection reset by peer\""
用户可以通过以下的命令来进行处理
# yum update
# yum downgrade docker docker-client docker-common --before and no idea for what the old version of docker, just run
因为维护之前的项目遇到一些问题,特此记录一下,同理对于java程序一样适用哈。
以上就是完整的过程,总算写完了,花了不少时间,不足之处,还往大家的见谅。