- 对Linux、Docker以及CI/CD有基本的了解。
- GitLab帐号(免费计划即可)。
- 一台具备SSH访问权限的Linux服务器(非root用户即可)。我使用的是带有LAMP[1]技术栈的Ubuntu 16.04 LTS系统。
- 装有SSH和LFTP[2]的轻量级Docker镜像。
- 你已经登录GitLab
- 你是某个project/repository的拥有者
- 你能够在本地机器通过Git访问这个repo进行pull和push操作
我用的是GitKraken[3],一个Git GUI工具,能够较为方面的进行Git操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/7018.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/7018.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/7018.html
$ ssh-keygen rsa -b 2048
$ ssh-copy-id -i /path/to/key user@host
$ ssh -i /path/to/key user@host
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/7018.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/7018.html
image: jimmyadaro/gitlab-ci-cd:latest
Deploy:
stage: deploy
only:
— ‘master’
when: manual
allow_failure: false
before_script:
#Create .ssh directory
— mkdir -p ~/.ssh
#Save the SSH private key
— echo “$SSH_PRIVATE_KEY” > ~/.ssh/id_rsa
— chmod 700 ~/.ssh
— chmod 600 ~/.ssh/id_rsa
— eval $(ssh-agent -s)
— ssh-add ~/.ssh/id_rsa
script:
#Backup everything in /var/www/html/
— ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa $USERNAME@$HOST “zip -q -r /var/backups/www/01-Deploy-$(date +%F_%H-%M-%S).zip /var/www/html/”
#Deploy new files to /var/www/html
— lftp -d -u $USERNAME, -e ‘set sftp:auto-confirm true; set sftp:connect-program “ssh -a -x -i ~/.ssh/id_rsa”; mirror -Rnev ./ /var/www/html — ignore-time — exclude-glob .git* — exclude .git/; exit’ sftp://$HOST
— rm -f ~/.ssh/id_rsa
— ‘echo Deploy done: $(date “+%F %H:%M:%S”)’
image: jimmyadaro/gitlab-ci-cd:latest
Deploy:
stage: deploy
only:
— ‘master’
when: manual
allow_failure: false
before_script:
#Create .ssh directory
— mkdir -p ~/.ssh
#Save the SSH private key
— echo “$SSH_PRIVATE_KEY” > ~/.ssh/id_rsa
— chmod 700 ~/.ssh
— chmod 600 ~/.ssh/id_rsa
— eval $(ssh-agent -s)
— ssh-add ~/.ssh/id_rsa
script:
#Backup everything in /var/www/html/
— ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa $USERNAME@$HOST “zip -q -r /var/backups/www/01-Deploy-$(date +%F_%H-%M-%S).zip /var/www/html/”
#Deploy new files to /var/www/html
— lftp -d -u $USERNAME, -e ‘set sftp:auto-confirm true; set sftp:connect-program “ssh -a -x -i ~/.ssh/id_rsa”; mirror -Rnev ./ /var/www/html — ignore-time — exclude-glob .git* — exclude .git/; exit’ sftp://$HOST
— rm -f ~/.ssh/id_rsa
— ‘echo Deploy done: $(date “+%F %H:%M:%S”)’
— ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa $USERNAME@$HOST “zip -q -r /var/backups/www/01-Deploy-$(date +%F_%H-%M-%S).zip /var/www/html/”
— lftp -d -u $USERNAME, -e ‘set sftp:auto-confirm true; set sftp:connect-program “ssh -a -x -i ~/.ssh/id_rsa”; mirror -Rnev ./ /var/www/html — ignore-time — exclude-glob .git* — exclude .git/; exit’ sftp://$HOST
- -u设置了我们sftp://$HOST的SSH用户名。
- -e用于设置执行命令(使用单引号进行配置)。
- -R用于设置reverse mirror。
- -n表示只上传新的文件。
- -e用于删除在我们源中不存在的文件。
- -v用于配置verbose日志。
- ignore-time将在决定是否下载时忽略时间。
- exclude-glob .git`将会排除任何目录中匹配`.git的所有文件(例如.gitignore以及.gitkeep)。你可以在这里设置其他文件匹配方式。
- exclude .git/这个配置将会保证不上传我们repo中的git文件。
- exit将会停止LFTP和SSH执行。
— rm -f ~/.ssh/id_rsa
— ‘echo Deploy done: $(date “+%F %H:%M:%S”)’
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/7018.html
2021-04-19 21:27 1F
-e用于设置执行命令(使用单引号进行配置)。 这里面如果加个变量目录,怎么写呢,单引号里变量被当作字符串了