2021年1月

查看容器的已挂载目录

查看容器ID和名称:
docker ps ###查看当前启动的容器信息
2021-01-28T02:54:54.png
查看某一个容器已经挂载的目录:
docker inspect 5406191cda6f | grep Mounts -A 20 ###通过容器ID查看
docker inspect jenkins | grep Mounts -A 20 ###通过容器名称查看
2021-01-28T02:49:39.png
2021-01-28T02:50:21.png

docker给已经启动容器添加新的挂载目录

查看启动容器的配置文件:
docker stop ###停止容器
cd /var/lib/docker/containers ###进入containers文件
ls ###查看containers目录下,目标容器详细ID
cd /var/lib/docker/containers/容器ID ###结合docker ps命令查询的ID可知哪一个是查询容器的详细id
如下图可找到对应配置文件进行修改。

2021-01-28T03:29:36.png

docker日志存储位置
在Linux系统中docker启动后日志存储在/var/lib/docker/containers/容器ID/目录中,启动一个容器后,容器ID目录中会生成如下文件:
5406191cda6fbc9fb7765c0b8aa31e075e8854900fab1f61917bab3c07f4af7a-json.log checkpoints config.v2.json hostconfig.json hostname hosts mounts resolv.conf resolv.conf.hash
2021-01-28T03:47:52.png
每个容器的日志默认都会以 json-file 的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log 下,不过并不建议去这里直接读取内容,因为容器的日志则可以通过 docker logs命令来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果使用 Docker Compose,则可以通过 docker-compose logs <服务名> 来查看。

  1. 生成本机的SSH 密钥 (通常包含在 '~/.ssh/id_rsa.pub' 文件中,并以 'ssh-rsa' 开头)

cd ~/.ssh/ ###进入~/.ssh/文件
打开电脑终端,进入~/.ssh/文件查看是否存在id_rsa.pub和id_rsa文件。
若存在,表明之前已生成过SSH rsa密钥,可重新生成或使用现有密钥。
若没有或重新生成,输入以下命令生成密钥。
ssh-keygen -t rsa -C "email@example.com" ###其中邮箱地址为你在gitlub上个人信息邮箱地址保持一致。

一直选择回车键即可,若为重新生成,则当询问是否rewrite时,需要输入yes。生成完成后,可输入以下命名查看并复制公钥。
cat id_rsa.pub ###查看rsa公钥,前提:需先进入~/.ssh/文件

  1. 粘贴SSH公钥到gitlab

登录gitlab,将第一步中生成的SSH 公钥地址粘贴到SSH key,粘贴您的 SSH 公钥
2021-01-21T08:29:45.png

3.验证本地连接是否ok
git config --global user.name "name" ###配置gitlab用户名
git config --global user.email "email@example.com" ###配置gitlab邮箱
ssh -T ssh://git@gitlab.com ###检查本地连接是否OK
2021-01-21T09:14:29.png
如果连接OK,既可以拉取和上传代码。

4.ssh方式或http方式拉取项目代码
git clone ssh://git@gitlab.com:30022/name/projectname.git ###使用ssh拉取,需完成上面的1、2、3步
git clone http://gitlab.com/name/projectname.git ###使用http方式拉取
cd projectname ###进入克隆下来的工程文件
2021-01-21T09:10:53.png

5.更新上传代码相关命令
若之前拉取过工程,更改了内容,上传新的内容命令如下:
git add . ###将项目的文件添加到仓库中
git commit -m "更新信息" ###提交到远程仓库,双引号内写入更新信息
git pull 或 git pull origin master ###拉取最新代码,指定分支
git push 或 git push -u origin master ###上传最新代码,指定分支
2021-01-21T09:12:34.png
若未拉取过工程,需上传本地已存在的文件,代码命令如下:
cd existing_folder ###进入已存在的文件
git init ###初始化git仓库
git remote add origin git@gitlab.com:name/projectname.git ###添加关联远程仓库地址
git add . ###上面已解释
git commit -m "Initial commit" ###上面已解释
git push -u origin master ###上面已解释

若更新仓库地址使用命令:git remote set-url origin git@gitlab.com:name/projectname.git
若删除仓库地址使用命令:git remote remove origin git@gitlab.com:name/projectname.git
查看关联的远程仓库使用命令:git remote -v

⚠️注:截图中涉及地址为内网地址。

cd /usr/local

安装node js

wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.xz ###下载安装包
tar xf node-v10.15.0-linux-x64.tar.xz ###解压安装包
cd node-v10.15.0-linux-x64 ###删除多余的压缩安装包
ls node-v10.15.0-linux-x64/bin ###查看cpm和node文件
pwd ###查看cpm和node文件位置
ln -s /usr/local/node-v10.15.0-linux-x64/bin/node /usr/local/bin/node ###软连接
ln -s /usr/local/node-v10.15.0-linux-x64/bin/node /usr/local/bin/node ###软连接
npm run build ###查看npm命令是否OK
node -v ###查看npm安装版本
export PATH=$PATH:/usr/local/node-v10.15.0-linux-x64/bin. ###环境变量配置

备注:
mac环境变量配置文件 .bash_profile
linux 环境变量配置文件/etc/profile

android-sdk安装

wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz ###下载安装包
tar -zvxf android-sdk_r24.4.1-linux.tgz ###解压安装包
rm android-sdk_r24.4.1-linux.tgz ###删除多余的压缩安装包
若想删除已经解压的文件夹,使用命令 rm -rf examplefilename
vi /etc/profile ###进入环境变量配置文件,写入如下3条export命令
export ANDROID_HOME=/usr/local/android-sdk-linux ###配置环境变量
export PATH=$ANDROID_HOME/tools:$PATH ###配置环境变量
export PATH=$ANDROID_HOME/platform-tools:$PATH ###配置环境变量
android update sdk --no-ui ###更新sdk包
export ###查看配置的环境变量
cd $ANDROID_HOME ###查看$ANDROID_HOME配置的环境变量是否生效

安装appium

前提条件:需安装node js成功才可执行 npm 命令安装appium。
npm install -g appium ###通过npm全局安装appium,直接使用npm需使用梯子
执行npm命令后,同node js所在文件夹(如上为node-v10.15.0-linux-x64)位置:/usr/local/node-v10.15.0-linux-x64,会生成node_modules文件夹,位置:/usr/local/node_modules
所以:
cd /usr/local/node_modules ###可查看已安装的内容,如appium

appium-doctor安装(主要用于检查appium安装是否缺少东西)

npm install -g appium-doctor ###全局安装appium-doctor,直接使用npm一般需使用梯子,

⚠️注意:若未使用梯子时使用npm下载失败,可先安装淘宝的cnpm,再使用cnpm安装

`npm install -g cnpm` ###安装淘宝的cnpm
`cnpm install -g appium` ###cnpm全局安装appium

  1. docker的镜像下载地址(带镜像pull命令):

https://hub.docker.com/

  1. docker相关基本命令:

列出当前正在运行的容器列表:

docker ps

2021-01-20T09:11:38.png
其中通过ports来查看容器的端口信息(是否映射以及映射的端口号)和使用的连接类型(tcpudp),如果暴露的端口是连续的,还会被合并在一起,例如一个容器暴露了3个 TCP 端口:100,101,102,则会显示为100-102/tcp。
如上图:Jenkins的端口5000用来做slave的,8080做主服务端口,其中默认50000端口说明在docker hub官方文档可查看。

列出当前机器所有的镜像:

docker images 

2021-01-20T09:26:31.png
其中“tag”为版本号,其中“REPOSITORY”镜像仓库全路径和镜像名称

启动容器命令:

docker run jenkins/jenkinsversion

-d、--name、-p、-v参数完善启动容器 :

docker run -d --name -p 8081:8080 myjenkins jenkins/jenkinsversion -v /data/jenkins_home/:/var/jenkins_home --privileged 

-d 后台运行,
--name 自定义名称,以上的我命名为myjenkins,docker是私有网络
-p,宿主机8081端口映射到8080端口做端口映射,把端口暴露出来,构建虚拟网络,当前机器可以访问,可以去了解下docker的网络原理
-v 宿主机的目录:容器的目录 ,挂载目录,可以有多个-v参数,如挂载主机的时间/etc/localtime、hosts文件等
--privileged 表示对目录拥有最高权限

进入容器:

docker exec -it -uroot myjenkins bash

其中myjenkins为docker ps 查看的 “names”

停止容器:

docker stop myjenkins 

其中myjenkins为docker ps 查看的 “names”

重启容器

docker restart myjenkins

删除容器:

docker rm  myjenkins 

查看容器日志:

docker logs -f  names 

Mac系统,查看Jenkins默认密码:

docker exec myjenkins tail /var/jenkins_home/secrets/initialAdminPassword

Jenkins自带的插件服务器在国内下载奇慢无比,于是乎需要更换为Jenkins国内源镜像进行加速。

废话少说,上步骤:

1、登录管理员账号
2、点击系统管理 - 系统配置 - 插件管理
3、点击“高级”Tab,找到最后一项“升级站点”
4、将URL输入框内容更换为清华源

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

现在更新插件,进度条应该是嗖一下就完了,哈哈~

在公司转岗做测开了,估计2021年上半年的工作都在自动构建上面,下半年估计忙自动化测试脚本开发和维护。

大体上,由于公司项目都是安卓系统源码工程,自动构建选了Jenkins+Gerrit+SonarQube等开源工具来实现。

现在主要讲讲怎么搭建SonarQube服务器:

  • 首先准备一台Ubuntu服务器,建议直接购买刀片机,安全又稳定(预算有限直接上台台式主机也可以)。

1)下载一些文件:

2)先安装数据库PostgreSQL(这个是Sonar唯一支持的开源DB,MS-SQL&Oracle都是收费的),命令:

sudo apt install PostgreSQL

然后对数据库进行简单的配置:

  • 创建用户postgres,命令:

    sudo -i -u postres

  • 输入以下命令进入交互界面:

    psql -u postres

  • 在交互界面输入以下命令修改默认密码:

    alter user postres with password '你的数据库账户密码';

  • 继续输入以下命令创建数据库:

    CREATE DATABASE sonar;

  • 输入以下命令退出设置:

    q

  • 输入exit退出postres账户
  • 将数据库信息写入到sonar的配置文件 $SONARQUBE-HOME/conf/sonar.properties:

    sonar.jdbc.username=postgres
    sonar.jdbc.password=你的密码
    sonar.jdbc.url=jdbc:postgresql://localhost/sonar

3)配置JDK路径到sonar配置文件$SONARQUBE-HOME/conf/wrapper.conf ,将以下行改为:
wrapper.java.command=你的JDK11绝对路径

4)把下载的CXX检查的jar包放入$SONARQUBE-HOME/extensions/plugins下

5)使用$SONARQUBE-HOME/bin/linux-x86-64/sonar.sh start启动sonar服务器, 出现以下字样代表启动成功(不能使用root权限启动):

Starting SonarQube...
SonarQube is already running.

6)浏览器输入 ip:9000 ,就可以看到sonar的主页了。

默认账户/密码:admin/admin

7)安装简体中文包:

① 点击顶部菜单,最后一个配置,
② 点击子菜单“应用市场”,
③ 在插件搜索框中输入“chinese”,安装简体中文插件

一些问题解决方法:
1、启动的时候遇到 Process exited with exit value [es]: 143报错:
解决方法:
在/etc/sysctl.conf文件中加入
vm.max_map_count=262144
fs.file-max=65536
然后执行sysctl -p使配置生效

在 /etc/security/limits.conf后加入
ulimit -n 65536
ulimit -u 2048
然后切换sonar用户下执行ulimit -Hn

$SONARQUBE-HOME/bin/linux-x86-64/sonar.sh restart 重启
2、启动的时候遇到 Process exited with exit value [es]: 1报错:
解决方法:
以普通权限运行,不要以root权限执行

经常会有这样一种需求,为了方便部署软件或者工具,降低部署安装配置难度,需要把安装过程封装起来,只需要执行一条命令即可。

实现方法:
首先新建一个文件,命名为shell_pack.sh,写入以下内容:

#!/bin/bash - 
#===============================================================================
#
#          FILE: shell_pack.sh
# 
#         USAGE: ./shell_pack.sh 
# 
#   DESCRIPTION: 
# 
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: lwq (28120), scue@vip.qq.com
#  ORGANIZATION: 
#       CREATED: 04/22/2015 02:38:01 PM CST
#      REVISION:  ---
#===============================================================================

#===  FUNCTION  ================================================================
#         NAME:  usage
#  DESCRIPTION:  Display usage information.
#===============================================================================
function usage ()
{
        cat <<- EOT

  Usage :  $0 -p package -s script file1 file2 file3 ..

  Options:
  -h|help       Display this message
  -p|package    The output package name
  -s|script     The script will run when unpack package
  Other         The all files what you want to pack

EOT
}    # ----------  end of function usage  ----------

#-----------------------------------------------------------------------
#  Handle command line arguments
#-----------------------------------------------------------------------

while getopts ":hp:s:" opt
do
  case $opt in

    h|help    ) usage; exit 0   ;;
    p|package ) package_name=$OPTARG ;;
    s|script  ) install_script=$OPTARG ;;
    \?        ) echo -e "\n  Option does not exist : $OPTARG\n"
          usage; exit 1   ;;

  esac    # --- end of case ---
done
shift $(($OPTIND-1))

if [[ -z $package_name ]]; then
    echo "package_name can't not be empty"
    usage
    exit
fi

if [[ -z $package_name ]]; then
    echo "install_script can't not be empty"
    usage
    exit
fi

files=$@

generate_wrapper_script(){
    local install_script=$1
    local wrapper_script=$2
    cat <<-'EOT' >$wrapper_script
#!/bin/sh
echo "begin ..."
unpackdir=/tmp/$(basename $0)_unpack
rm -rf $unpackdir 2>/dev/null
mkdir -p $unpackdir
echo "unpacking ..."
sed '1, /^#__SCRIPTEND__/d' $0 | tar zxf - -C $unpackdir
if [ $? -ne 0 ]; then
    echo "unpack package failed."
    exit 1
fi
echo ""
echo "installing ..."
cd $unpackdir
EOT
    cat <<-EOR >>$wrapper_script
chmod +x $install_script
./$install_script
EOR
    cat <<-'EOE' >>$wrapper_script
if [ $? -ne 0 ]; then
    echo "install failed."
    exit 2
elif [[ -d $unpackdir ]]; then
    rm -rf $unpackdir
fi
echo "install ok, enjoy!"
exit 0
#__SCRIPTEND__
EOE
}

tarfile=package_content_$$.tgz
wrapfile=wrap_$$.sh

echo -e "start packing ..\n"
tar zcvf $tarfile $files $install_script
generate_wrapper_script $install_script $wrapfile
cat $wrapfile $tarfile > $package_name
chmod +x $package_name

echo -e "\noutput: $package_name\n"

rm -f $tarfile
rm -f $wrapfile

用法:shell_pack.sh -p package -s script file1 file2 file3 ..

Linux下敲docker命令抱一下错误:
FATA[0000] Get http:///var/run/docker.sock/v1.18/images/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?

解决办法:
sudo chmod -R 777 /var/run/docker.sock