如若有你一生何求 發表於 2021-8-19 08:28:00

最详细之教你Jenkins+github自动化部署.Net Core程序到Docker

<p>环境 centos7.9,.NET5</p>
<h1>一、Jenkins搭建</h1>
<p><strong>1)下载Jenkins的war包</strong></p>
<p>在\home目录建一个jenkins目录放jenkins的包</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">进入\home目录</span>
<span style="color: rgba(0, 0, 0, 1)">cd \home
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建 jenkins目录</span>
mkdir jenkins</pre>
</div>
<p>在jenkins目录下载war包</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">进入jenkin目录</span>
<span style="color: rgba(0, 0, 0, 1)">cd \home\jenkins
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">下载jenkins的war包</span>
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war</pre>
</div>
<p>如果包wget命令用不了的话,安装一下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">如果wget命令用不了的话,执行以下命令</span>
yum -y install wget </pre>
</div>
<p>下载完后jenkins目录下产生一个jenkins.war文件</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817232855677-1749965251.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>&nbsp;2)安装java jdk</strong></p>
<p>看到war,可以知道jenkins是java写的,所以要安装java,官网上提示安装java1.8或java11,这里安装java1.8</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">下载java jdk的rpm文件</span>
wget --no-check-certificate --no-cookies --header <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Cookie: oraclelicense=accept-securebackup-cookie</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> \
http:</span>//download.oracle.com/otn-pub/java/jdk/8u301-b09/d3c52aa6bfa54d3ca74e617f18309292/jdk-8u301-linux-<span style="color: rgba(0, 0, 0, 1)">x64.rpm
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">授权限</span>
chmod +x jdk-8u301-linux-<span style="color: rgba(0, 0, 0, 1)">x64.rpm
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">安装</span>
rpm -ivh jdk-8u301-linux-x64.rpm</pre>
</div>
<p>如果报 Unable to establish SSL connection 执行一下下面命令</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">如果报Unable to establish SSL connection.执行下面命令</span>
yum install openssl openssl-devel -y</pre>
</div>
<p>执行完上面3个命令,看下java版本信息</p>
<div class="cnblogs_code">
<pre>java -version</pre>
</div>
<p>看到已经安装好了</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817233922765-1097326099.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>&nbsp;3)安装Jenkins</strong></p>
<p>进入到上面的jenkins.war包的目录\home\jenkins</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">启动,调通前用这个,没问题后再用后台启动,关闭窗体就停止,或ctrl+c停止</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">java -jar jenkins.war --httpPort=8081</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">后台运行 --后台启动,窗体关闭了,也在后台启动</span>
nohup java -jar jenkins.war --httpPort=8081 &amp;
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">输入jps 查看当前jenkins启动的进程号</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">ps ef|grep jenkins 查询当前启动的jenkins的进程号</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">如果要关闭,kill -9 端口号</span></pre>
</div>
<p>&nbsp;</p>
<p>执行上面命令中的&nbsp;&nbsp;nohup java -jar jenkins.war --httpPort=8081 &amp;&nbsp; 后,浏览器打开ip:8081,这里安装过程要小等一会才能打开</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235356670-124951416.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;然后按提示命令打开 vi /root/.jenkins/secrets/initialAdminPassword 文件把密码复制到输入框上</p>
<div class="cnblogs_code">
<pre>vi /root/.jenkins/secrets/initialAdminPassword</pre>
</div>
<p>然后到这个界面,如果不熟悉,就用推荐的。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235427657-440201844.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>一直等待安装完,如果有失败是网络原因,重试就能装上了。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235525791-1141069474.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>装完后跳到这个界面,输入用户名密码,邮件。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235542273-10212913.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后到这个界面,直接保存。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235614405-252608077.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后开始使用,来到jenkins界面,右上方有个铃,点击升级。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235636927-1563786078.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;装完重启</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235649593-259864449.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>安装完成。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210817235713800-251274816.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>如果遇到升级慢的问题解决</strong></p>
<p>1、修改/home/jenkins/hudson.model.UpdateCenter.xml文件</p>
<div class="cnblogs_code">
<pre>vi /home/jenkins/hudson.model.UpdateCenter.xml</pre>
</div>
<p>修改为:</p>
<div class="cnblogs_code">
<pre>&lt;sites&gt;<span style="color: rgba(0, 0, 0, 1)">
&lt;site</span>&gt;<span style="color: rgba(0, 0, 0, 1)">
    &lt;id</span>&gt;<span style="color: rgba(0, 0, 255, 1)">default</span>&lt;/id&gt;<span style="color: rgba(0, 0, 0, 1)">
&lt;url</span>&gt;http://mirror.xmission.com/jenkins/updates/update-center.json&lt;/url&gt;<span style="color: rgba(0, 0, 0, 1)">
&lt;</span>/site&gt;<span style="color: rgba(0, 0, 0, 1)">
&lt;</span>/sites&gt;</pre>
</div>
<p>&nbsp;</p>
<p>2、设置 default.json 权限 安装插件什么的时候,不需要google.com,改成百度</p>
<div class="cnblogs_code">
<pre> cd /root/.jenkins/updates/</pre>
</div>
<p>然后执行下面的</p>
<div class="cnblogs_code">
<pre>sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/<span style="color: rgba(0, 0, 0, 1)">mirrors.tuna.tsinghua.edu
.cn\</span>/jenkins/g' <span style="color: rgba(0, 0, 255, 1)">default</span>.json &amp;&amp; sed -<span style="color: rgba(0, 0, 0, 1)">i
's</span>/http:\/\/www.google.com/https:\/\/www.baidu.com/<span style="color: rgba(0, 0, 0, 1)">g
' </span><span style="color: rgba(0, 0, 255, 1)">default</span>.json</pre>
</div>
<p>修改完之后,需要重新启动</p>
<h1>二、github .NetCore项目准备</h1>
<p>github创建一个私有仓库</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818000817240-347021578.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>创建完后进入仓库,把地址复制出来</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818001047666-687882227.png" alt="" loading="lazy">&nbsp;</p>
<p>&nbsp;</p>
<p>把项目克隆到本地,这里用vs2019的git功能</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818002638692-1631997963.png" alt="" loading="lazy"></p>
<p>点克隆后会弹出一个github的授权页面授权给vs,然后成功把项目克隆到本地。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818010038322-1760555877.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;创建一个.NetCore程序,并放到刚才克隆的目录</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818010452953-1917466760.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;运行一下查看界面</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818010552139-2002272557.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;因为我们要把.NetCore程序部署到Docker,所以建一个DockerFile文件</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818010948711-1896271150.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;点了后会会产生一个Dockerfile文件,在根目录,需要把它移动到外面,和项目文件夹同级。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818011259616-1288630791.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>Dockerfile的内容是vs自动生成的,内容如下,<span style="background-color: rgba(255, 255, 255, 1); color: rgba(255, 0, 0, 1)"><strong>注意一下Copy和dotnet restore 路径,前面多了个项目名的路径,有的vs自动生成没带上</strong></span>。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210820095454117-748103393.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>然后提交修改。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818011455434-1138158498.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;把项目推到github</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818011550079-1208240507.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;打开githug看到项目已经提交成功</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819020835804-723797216.jpg" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>三、服务器git客户端安装</h1>
<p>回到服务器,执行安装git客户端命令</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">安装git客户端</span>
yum install -y git</pre>
</div>
<p>安装完客户端后,执行命令生成ssh key命令,一直回车确认即可。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">生成ssh key</span>
ssh-keygen -t rsa -C '284743503@qq.com'</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819002909747-487999914.jpg" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>执行完命令后,可以看到把ssh key生成到了/root/.ssh目录下了,id_rsa文件为私钥,id_rsa.pub为公钥。</p>
<p>执行vi /root/.ssh/id_rsa.pub打开公钥。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819003518937-786178579.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;把上面的公钥复制到github上的ssh key里。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819003838483-1355349433.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819003947751-704478740.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;还有一个要安装Docker,如果机器没安装有,参考我前面的一篇文章,把第一步做了就可以了,Docker环境安装,基本命令集合</p>
<h1>四、Jenkins自动化构建任务创建</h1>
<p>回到jenkins,新建任务</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818012141806-216514515.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>输入任务名称,构建自由风格项目</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210818012236728-883350936.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>进去源码管理,</strong>选择Git,仓库URL填上面克隆github项目的ssh地址,因为项目是私有的,因为是私有的,所以也要把git的私钥凭证加进来。</p>
<p>复制github上的地址</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819004742750-368841371.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>填到jenkins的git上,把分支改为github的默认main分支,然后添加github凭证。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819005418873-1911708719.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;凭证填上面的id_rsa文件里面的私钥,命令 vi /root/.ssh/id_rsa然后复制里面的私钥填到sshkey凭证里面。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819005948468-1051884246.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;配置完后外面选刚才的配置。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819010044655-204749497.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>构建环境</strong>,把超时时间设10分钟,因为访问github网络可能会有点慢,项目文件大的时候拉取需要时间。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819010333034-1709220012.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>&nbsp;构建,</strong>选择执行shell命令,命令如下,生成docker镜像,然后运行容器实例,然后完成。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">!/bin/bash</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)"> 获取短版本号</span>
GITHASH=`git rev-parse --<span style="color: rgba(0, 0, 0, 1)">short HEAD`
echo </span>---------------开始编译程序...------------------<span style="color: rgba(0, 0, 0, 1)">
echo </span>---------------Building Docker Image...--------
----------<span style="color: rgba(0, 0, 0, 1)">
docker build </span>-t jkdemo:<span style="color: rgba(128, 0, 128, 1)">$GITHASH</span><span style="color: rgba(0, 0, 0, 1)"> .
docker tag jkdemo:</span><span style="color: rgba(128, 0, 128, 1)">$GITHASH</span><span style="color: rgba(0, 0, 0, 1)"> jkdemo:latest
echo </span>---------------Launching Container...----------
--------<span style="color: rgba(0, 0, 0, 1)">
docker rm </span><span style="color: rgba(0, 128, 128, 1)">-f</span><span style="color: rgba(0, 0, 0, 1)"> jkdemo1
docker run </span>-d -p 5001:80 --name jkdemo1 jkdemo:latest</pre>
</div>
<p>&nbsp;</p>
<p><strong><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819010544305-1149470378.png" alt="" loading="lazy"></strong></p>
<p>&nbsp;</p>
<p>&nbsp;在这个任务下点击立即构建,就会自动拉取代码,然后执行里面的shell命令发布。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819011011328-244266210.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;构建成功</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819021124927-256065428.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>访问部署的.NetCore ,ip:5001,访问成功</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819021232179-408254062.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>更新站点,提交</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819021355793-1719264730.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819021430843-565932258.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;再点击立即构建,构建成功,点进去还能看到提交的内容</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819021607271-58533895.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210821103632826-2050938227.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;再访问站点,发现更新了。</p>
<p><img src="https://img2020.cnblogs.com/blog/630011/202108/630011-20210819021707977-1377688074.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;后面的修改,提交后,只需要点击构建就可以自动发布啦!公司中一般都是用自己搭的gitlab,只要把github的操作换成gitlab,操作过程也是一样的。</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/wei325/p/15154918.html
頁: [1]
查看完整版本: 最详细之教你Jenkins+github自动化部署.Net Core程序到Docker