CentOS7 安装 Jenkins( 构建 Vue 和 dotNET Core )

之前的自动构建工具 Jenkins 是部署在公司内网的 Windows 服务器上,现在武汉处于非常时期,兄弟们都在家自我隔离,为了远程提交的代码能自动构建,需要在外网的 CentOS 服务器上搭建 Jenkins 环境来进行构建工作。

目的

产品采用前后端分离架构,前端使用 Vue,后端使用 dotNET Core ,当代码提交 GitLab后,需要自动构建前后端代码,并发布到测试环境的容器中,步骤如下:

  • 安装 Jenkins

  • 设置 Jenkins 权限

  • 安装其他依赖

  • 配置 Jenkins

环境

  • CentOS:7.5

  • Jenkins:2.204.2

  • node:12.14.1

  • dotNET Core:2.1

安装 Jenkins

1、安装 wget

yum -y install wget

2、安装 jdk

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

3、安装 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
#安装
yum install jenkins

设置 Jenkins 权限

1、Jenkins 安装后,执行命令 vim /etc/sysconfig/jenkins 进行修改,将用户修改为root

#修改配置
$JENKINS_USER="root"

2、修改目录权限

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

安装其他依赖

1、安装git

yum install git

2、安装 node

curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash
yum -y install nodejs

3、安装vue

npm install -g @vue/cli

4、安装 netcore2.1

rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
yum -y install dotnet-sdk-2.1

5、安装docker

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --enable docker-ce-edge
sudo yum install docker-ce
#启动docker
systemctl start docker
#设置开机启动
chkconfig docker on

配置 Jenkins

在之前的文章《 GitLab 配合 Jenkins 打造自动化部署 》中介绍过在 Windows 环境下配置 Jenkins,可以作为参考,下面介绍在 CentOS 中的具体步骤:

创建相关目录和文件

在 CentOS 中创建相关的目录和文件,创建完后的目录结构如下图:

  • build 目录:用来存放构建相关的目录和文件

    • conf.d

      • default.conf:nginx 的配置文件

    • web

      • devops.sh:vue 项目的构建批处理命令

      • Dockerfile:构建 vue 项目到 docker 容器的文件

    • webapi

      • devops.sh:api 项目的构建批处理命令

      • Dockerfile:构建 api 项目到 docker 容器的文件

    • conf.d

      • default.conf:nginx 的配置文件

  • code 目录:用来存放 git 拉取的源代码的目录

    • web:vue 前端代码

    • webapi:api 接口代码

build/conf.d/default.conf:

server {listen       80;server_name  10.10.10.10;client_max_body_size 100M;location / {root   /usr/share/nginx/html;index  index.html index.htm;try_files $uri $uri/ /index.html; }error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

build/web/devops.sh:

#!/bin/bash
echo "del none images"
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi
echo "container del success"docker stop web
docker rm web
echo "container web del success"echo "begin docker build"if [ ! -d web ]; thenmkdir -p web
ficp /root/jenkins/build/web/Dockerfile ./web
cp -r /root/jenkins/code/web/dist/* ./webecho "begin docker build"
cd web
docker build -t web .
echo "build end"docker run -d -p 9001:80 --name web -v /root/jenkins/build/conf.d:/etc/nginx/conf.d:ro  --restart=always  webcd ..
rm -rf web

build/web/Dockerfile:

FROM nginx:latest
COPY . /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

build/webapi/devops.sh:

#!/bin/bash
echo "del none images"
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi
echo "container del success"docker stop webapi
docker rm webapi
echo "container webapi del success"echo "begin docker build"
if [ ! -d web ]; thenmkdir -p web
fi
cp /root/jenkins/build/webapi/Dockerfile ./web
cp -r /root/code/webapi/myapi/bin/Debug/netcoreapp2.1/publish/* ./webecho "begin docker build"
cd web
docker build -t webapi .
echo "build end"docker run -d -p 5000:5000 --restart=always --name webapi webapi

build/webapi/Dockerfile:

FROM microsoft/dotnet:2.1-aspnetcore-runtime
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "myapi.dll"]

全局配置

配置 git 目录,可以先执行命令 whereis git 找到 git 的目录,然后进行设置,如下图:

Vue 项目的配置

1、设置运行目录

2、构建的命令设置

WebAPI 项目的配置

1、设置运行目录

2、构建的命令设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell(希尔排序)

shell&#xff08;希尔排序&#xff09; 原理:参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void shellInsert(int b[],int dk,int length) {//希尔排序以dk的增量插入int j;for (int i 1 dk; i < length-1; i) {b[0] b[i];//哨…

[蓝桥杯2019初赛]等差数列-数列

解题思路: 给你n个数&#xff0c;是某个等差数列的一部分&#xff0c;问该等差数列最小有几项&#xff1f;&#xff1a;((最大数−最小数)/d)1((最大数-最小数)/d)1((最大数−最小数)/d)1,其中d是该等差数列所有&#xff08;所有已知数与最小数差值&#xff09;的最大公因数&am…

Dynatrace成功扩展kubernetes全栈可观察性

软件情报公司Dynatrace&#xff08;NYSE&#xff1a;DT&#xff09;在Perform 2020会议上宣布了对Kubernetes支持的新增强功能。Dynatrace可解释的AI引擎DavisTM现在自动获取其他Kubernetes事件和指标&#xff0c;使其能够在整个Kubernetes集群&#xff0c;容器和工作负载的堆栈…

wordList3

wordList3 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

[蓝桥杯2019初赛]矩形切割-找规律

代码如下&#xff1a; #include <iostream> using namespace std;int main() {int a, b;int ans 1;cin >> a >> b;while (1) {if (a 1 && b 1 || a b)break;if ( a > b) {int c b;b a;a c;}b b - a;ans;}cout << ans << end…

K8S水平伸缩器 - 自动伸缩微服务实例数量

作者&#xff1a;justmine头条号&#xff1a;大数据达摩院微信公众号&#xff1a;大数据处理系统创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便大家阅读&#xff0c;可以关注头条号或微信公众号&#xff0c;后续…

[蓝桥杯2019初赛]质数-质数筛or 水题

法一&#xff1a; 代码如下&#xff1a; #include <iostream> #include <cmath> using namespace std;bool check(int x) {for (int i 2; i < sqrt(x); i)if (x % i 0)return false;return true; }int main() {int n;int ans 0;for (int i 2; i; i) {if (c…

SqlServer 利用游标批量更新数据

SqlServer 利用游标批量更新数据Intro游标在有时候会很有用&#xff0c;在更新一部分不多的数据时&#xff0c;可以很方便的更新数据&#xff0c;不需要再写一个小工具来做了&#xff0c;直接写 SQL 就可以了Sample下面来看一个实际示例&#xff1a;-- 声明字段变量 DECLARE Re…

math:线性代数之行列式

math&#xff1a;线性代数之行列式 提供解题的方法总结 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢!

[蓝桥杯2019初赛]旋转-找规律

代码如下&#xff1a; #include <iostream> using namespace std; const int N 110; int a[N][N];int main() {int n, m;cin >> n >> m;for (int i 1; i < n; i)for (int j 1; j < m; j)cin >> a[i][j];for (int i 1; i < m; i){for (in…

《ASP.NET Core 微服务实战》-- 读书笔记(第5章)

第 5 章 创建数据服务选择一种数据存储由于我坚持要尽可能的跨平台&#xff0c;所以我决定选用 Postgres&#xff0c;而不用 SQL Server 以照顾 Linux 或 Mac 电脑的读者构建 Postgres 仓储在本节&#xff0c;我们要升级位置服务让它使用 Postgres为了完成这一过程&#xff0c;…

腾飞答不忘初心的三个问题

去年的时候有同学在微信上问了我3个问题&#xff0c;我觉得非常有代表性&#xff0c;当时没有回答。主要是通过简短的语言无法全面表述可能会产生歧义&#xff0c;所以决定专门写一篇文章来表达一下我的想法&#xff0c;需要说明的是以下内容只是以我个人的经验给大家一些参考。…

wordList04

wordList04 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

用 C# 写一个 Redis 数据同步小工具

用 C# 写一个 Redis 数据同步小工具Intro为了实现 redis 的数据迁移而写的一个小工具&#xff0c;将一个实例中的 redis 数据同步到另外一个实例中。(原本打算找一个已有的工具去做&#xff0c;找了一个 nodejs 的小工具&#xff0c;结果折腾了好久都没装上。。。于是就自己写了…

数据结构----冒泡排序

数据结构----冒泡排序 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void bubbleSort(int a[], int length) {//冒泡排序for (int i 0; i < length - 1; i) {//趟数for (int j 0; j < length - i - 1; j) {if…

C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。

前言作为.net程序员&#xff0c;使用过指针&#xff0c;写过不安全代码吗&#xff1f;为什么要使用指针&#xff0c;什么时候需要使用它&#xff0c;以及如何安全、高效地使用它&#xff1f;如果能很好地回答这几个问题&#xff0c;那么就能很好地理解今天了主题了。C#构建了一…

数据结构------选择排序

数据结构------选择排序 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void simpleSelectSort(int a[], int length) {//选择排序int j;for (int i 0; i < length - 1; i) {int k i;//每趟排序中找到最小的元素…

[蓝桥杯2018初赛]第几个幸运数-数论+枚举

代码如下&#xff1a; #include <iostream> #include <cmath> using namespace std; typedef long long LL; LL n 59084709587505; LL ans 0;int main() {for (int i 0; pow(3, i) < n; i)for (int j 0; pow(5, j) < n; j)for (int k 0; pow(7, k) <…

向大厂看齐!为自己的程序增加自动转储的功能!

如果你还不清楚什么是转储文件&#xff0c;不知道什么时候需要转储文件&#xff0c;请参考转储文件系列文章的第一篇 —— 转储文件知多少。前言不知道各位小伙伴有没有遇到过 微信 或者 QQ 崩溃的情况。它们在崩溃的时候都会自动弹出一个对话框&#xff0c;提示用户上传相关文…

sqlite3 c++ VS编译生成静态库

官网 https://www.sqlite.org/download.html 下载sqlite-amalgamation和x86版本下载sqlite-dll-win32-x86、x64位版本sqlite-dll-win64-x64 解压 SQLITE-AMALGAMATION包含 shell.csqlite3.csqlite3.hsqlite3ext.hsqlite-dll-win32-x86包含 sqlite3.def sqlite3.dll建立一个空…