1.go安装时问题解决

打开你的终端并执行

Go 1.13 及以上(推荐)
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct

打开你的 PowerShell 并执行

Windows
C:> $env:GO111MODULE = “on”
C:> $env:GOPROXY = “https://goproxy.cn”

Windows平台按下Ctrl+Shift+P

我们选择Go:Install/Update Tools这个命令

选中所有并回车执行该命令(或者使用鼠标点击该命令)

修改vscode终端cmd启动

1.在文件 -> 首选项 -> 设置中打开settings页面, 搜索shell或则找到Terminal>Integrated>Shell:Windows,

docker安装jenkins并自动部署,遇到的问题

1.目录映射权限的问题:默认jenkins目录,

#执行shell
chmod 1000:1000 /data/docker.mount/jenkins.hytera
//添加docker run 参数
-v /data/docker.mount/jenkins.hytera:/var/jenkins_home

2.要执行的部署脚本(在宿主机上)

//添加docker run 参数
-v /data/docker.script:/data/docker.script

3.jenkins是docker内部怎么执行宿主的docker命令,有多种方式,此处使用
“把docker的命令共享给jenkins”

//添加docker run 参数,共享docker命令
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/bin/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \

//添加docker run 参数,使用docker用户组运行,否则也无权限
--group-add=$(stat -c %g /var/run/docker.sock) \

4.docker拉取基础镜像仓库的权限:

//进入jenkins容器
docker exec -it jenkins bash
//在jenkins容器中登录docker仓库
docker login xxx.xxx.xxx.xxx

5.自动触发
Build Triggers 里选择 Trigger builds remote选项,添加一个token后,有一个远程url

#浏览器打开
http://xxx/job/incident.vcs/build?token=token

6.执行部署脚本

sh /data/docker.shell/xxx.sh

7.如果想在未登录jenkin时快速触发部署脚本:会提示权限不够

http://xxx/job/incident.vcs/build?token=token
会提示未授权
解决方法 :
https://blog.csdn.net/qq_40308101/article/details/108660501

完整docker run 脚本.sh

docker run -d \
-p 8080:8080 \
-p 50000:50000 \
-v /data/docker.mount/jenkins.home:/var/jenkins_home \
-v /data/docker.shell:/data/docker.script \
-v /etc/localtime:/etc/localtime \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/bin/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
--restart=always \
--group-add=$(stat -c %g /var/run/docker.sock) \
--name=jenkins.tzq jenkins

线程安全的集合

  1. ConcurrentDictionary 线程安全的字典。
  ConcurrentDictionary<string, string> dic = new ConcurrentDictionary<string, string>();
  1. ConcurrentBag 线程安全的List。
  ConcurrentBag<UserModel> userList = new ConcurrentBag<UserModel>();
  1. Concurrent—
 ConcurrentQueue<UserModel>;
 ConcurrentStack<UserModel>
  1. 在C#中,赋值和简单的数字运算都不是原子型操作。在多线程环境下,会产生数据安全的问题。
    在多线程环境下,我们可以通过使用System.Threading.Interlocked类来实现原子型操作当个数据,使用它比使用Monitor类跟简单。

    在c#里面,实现线程同步方法有很多种。我了解到的至少有8种。这里先讲下,一种比较简单的同步方法——-轻量级同步Interlock。
    为什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步。如果你学过操作系统里面的PV操作(即信号量),那么你对它已经了解了一般。它实现的正是如同信号量的功能。下面是它提供的方法:

Vue开发实战之组件核心概念:事件

  1. 事件绑定指令:v-on ,简写:@
 <button v-show="!del" @click="handleClick">删除</button>
  1. 子组件把触发父组件事件用:$emit(‘事件名’,参数)
 this.$emit("delete", this.title);

子组件为什么要触发父组件事件呢,因为子组件拿的值是自己范围的数据,如果需要通知父组件传过来的数据,需要在父组件修改

3.事件修饰符:可以更精确控制事件的触发

Vue开发实战之组件基础之组件注册

  1. 组件是为了代码复用
  2. 全局注册:
Vue.component('全局组件名称',{});
//例子
Vue.component('todo-item',{
props:{
  title:String,
  del:{
      type:Boolean,
      default:false
  }
}
template:'<span v-if="!del">{{title}}</span>',
data:function(){return {}},
methods:{}
});
  1. 使用
<todo-item v-for="item in list" :title="item.title" :del="item.del"></todo-item>