概述
你好,我叫顺。这一次,我想解释一下如何将单元测试设置为每次使用 GitHub Actions 推送时自动运行。
另外,我将介绍如何使用 .env 和 secrets 隐藏环境变量,这在其他文章中没有介绍过。
前提
- 框架是 Django (Python)
- 数据库是 MySQL
- 使用 docker-compose(Django、MySQL Dockerfile 已创建)
- 使用机密和 .env 文件隐藏 MySQL 密码和 Django 主机
- 已创建 Django 项目和应用程序
如果要为 Django 和 MySQL 创建 Dockerfile,请参考以下文章。
介绍
将源上传到 GitHub 时
- Dockerfile
- docker-compose.yml
- 工作流下的 yml 文件
- settings.py(或等效的其他框架设置相关文件)
直接将数据库密码等机密信息写入
因此,它在开发环境中作为环境变量存储在 .env 中,在生产环境中存储在 AWS 参数存储中。
这次,将 .env 放在项目的根目录下,并放入必要的信息
使用 .env 的时候,别忘了把 .gitignore 放到项目的根目录下。
下面是 .gitignore 中模板的链接
.env
这一次,创建一个 .env 文件,如下所示
任意变量名称和值
# MySQL
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=django-db
MYSQL_USER=django
MYSQL_PASSWORD=django
# Django
# SECRET_KEYの値は任意
SECRET_KEY="secret_key"
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
DEBUG=True
雪藏gs。 py
我想在settings.py中隐藏django和mysql的信息,所以写如下
from pathlib import Path
# osのモジュールをインポート
import os
# [・・・]
# SECRET_KEYを.envから取得
SECRET_KEY = os.environ.get("SECRET_KEY")
# DEBUGを.envから取得
DEBUG = os.environ.get("DEBUG")
# ALLOWED_HOSTSを.envから取得
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ")
# [・・・]
# MySQLのパラメータを.envから取得
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
# コンテナ内の環境変数をDATABASESのパラメータに反映
"NAME": os.environ.get("MYSQL_DATABASE"),
"USER": os.environ.get("MYSQL_USER"),
"PASSWORD": os.environ.get("MYSQL_PASSWORD"),
"HOST": "db",
"PORT": 3306,
}
}
让我们创建一个工作流
直接在根目录下创建如下文件
- .github/workflows/test.yml
- 设置-env.test.sh
我这次创建了test.yml,但是如果.github/workflows文件夹中的文件是yml,可以使用GitHub Actions
测试.yml
test.yml创建文件后写如下
# GitHub Actions上で表示されるワークフロー名
name: Test
# トリガー(今回はpushした時にジョブを実行する)
on: [push]
# ジョブを定義
jobs:
# testのジョブを定義
test:
# GitHub Actions上で表示されるJob名
name: Run Test Code
# ジョブを起動する仮想マシンを設定
# ubuntuがよく使われます
runs-on: ubuntu-20.04
# Docker Hubにログインできる処理を書く
# 書かなくても実行できるので削除しても大丈夫です
# ログインすることでimageをpullできる上限が増える
steps:
# 以下にステップを記載していく
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN}}
# ubuntu上にpushしたソースコードをチェックアウトする
# (簡単にいうとリモートリポジトリからソースコードを取ってきてる)
- name: Checkout
uses: actions/checkout@v2
# .envファイルを作成
- name: generate .env
# 権限を755に変えてset-up-env.test.shを実行します
# 権限を変えないとpermisson deniedと怒られ、実行できなくなります
run: chmod +x set-up-env.test.sh && sh set-up-env.test.sh
# 後述のsecretsを設定します
# secretsの環境変数の値をMYSQL_ROOT_PASSWORDなどの変数に代入します
env:
MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}
MYSQL_USER: ${{ secrets.MYSQL_USER }}
MYSQL_PASSWORD: ${{ secrets.MYSQL_PASSWORD }}
MYSQL_DATABASE: ${{ secrets.MYSQL_DATABASE }}
SECRET_KEY: ${{ secrets.SECRET_KEY }}
DJANGO_ALLOWED_HOSTS: ${{ secrets.DJANGO_ALLOWED_HOSTS }}
DEBUG: ${{ secrets.DEBUG }}
# テストを実行
- name: Test
run:
# Djangoのコンテナ名をappにしています
docker-compose run --rm app sh -c "python manage.py test"
返回 t-p-en v.手街嘘
即使你做了uses: actions/checkout@v2,.env 是 .gitignore 并且不在远程仓库中,所以你需要运行一个 shell 脚本在 ubuntu 上创建 .env
创建以下 shell 脚本并使用 GitHub Actions 运行它以创建 .env
用$写的变量的值包含了test.yml中设置的secrets的值#!/bin/bash 就像执行 shell 脚本的魅力,所以请不要忘记包含它。
#!/bin/bash
# DB
echo "MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD" >> .env
echo "MYSQL_USER=$MYSQL_USER" >> .env
echo "MYSQL_PASSWORD=$MYSQL_PASSWORD" >> .env
echo "MYSQL_DATABASE=$MYSQL_DATABASE" >> .env
# Django
echo "SECRET_KEY=$SECRET_KEY" >> .env
echo "DJANGO_ALLOWED_HOSTS=$DJANGO_ALLOWED_HOSTS" >> .env
echo "DEBUG=$DEBUG" >> .env
秘密
设置存储环境变量的机密
打开存储库的设置
打开安全>秘密>操作
按新存储库秘密
将您的秘密名称和值放在下面
请注意,一旦您按下添加密码,您将无法再次看到内容。
创建一个秘密将如下所示:
让我们跑吧!
由于这次按下了扳机
git push
当您这样做时,测试将自动运行
打开操作时会显示工作流列表
成功的是绿色,失败的是红色图标
作业名称显示在左侧。另请单击 test.yml 下的作业名称以获取更多详细信息
这次
- 登录 Docker Hub
- 结帐
- generate.env
- 测试
由于已经设置了各种步骤,它们将显示在列表中
您还可以在执行该步骤时查看日志
概括
我学到了很多,因为我找不到隐藏重要信息(例如密码)和使用机密和 .env 执行 GitHub Actions 的方法。
参考
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628097.html